如何继承在运行时创建的控件?

时间:2009-08-14 14:49:18

标签: delphi inheritance

我有两种形式,一种是main,另一种是main.lets我在主窗体上有一个函数:

procedure FormMain.CreateButton;
begin
  with TsButton.Create(Self) do begin
    Width := 31;
    Height := 31;
    Left := 31;
    Top := 31;
    Visible := true;
    Parent := Self;
  end;
end;

通常主表单上的所有内容都应该在继承的表单上,但这就是我所做的:

我从mainForm调用CreateButton,但按钮仅在主窗体上。

是否也可以继承该按钮?

3 个答案:

答案 0 :(得分:4)

设计时和运行时之间存在差异。表单设计器为表单创建一个定义,它在运行时实例化。如果从另一个表继承一个表单,则它将获取基本模板并添加到其中。但是表单设计器表单只是模板,比如类定义。

现在,在运行时,您实例化基本表单和派生表单,并从存储在应用程序的资源部分中的模板创建它们。如果你向基本表单的实例添加一些内容,那么你正在修改一个单独的实例,而不是定义,所以当然它不会出现在另一个实例上。如果要动态地向表单添加按钮,则必须单独在该实例(在本例中为派生表单)上创建它。

答案 1 :(得分:2)

如果你的意思是“继承”它通常意味着的方式,那么答案就是否定。 (通常,我的意思是你在IDE中创建了主窗体,然后在IDE中创建了该主窗体的后代。)

在这种情况下,在运行时创建的控件不是继承树的一部分,后代对它一无所知。您还必须手动将相同的代码添加到后代。

你到底想要完成什么?如果你提前知道基本和后代表单上都需要按钮(你显然会这样做,因为你正在编写代码来创建按钮),为什么不直接将按钮放在祖先上呢? / p>

答案 2 :(得分:1)

如果要继承,你将无法在这两种形式上做任何不同的事情。因此,您不希望它继承您的运行时更改!