2009-08-14 68 views
0

我有两种形式,一种是主要的和其他的遗传形式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,但该按钮只在主窗体上。

是否有可能继承该按钮?

回答

4

设计时和运行时间之间存在差异。表单设计器为您的表单创建一个定义,它在运行时实例化。如果您从另一个表单继承一个表单,那么它将采用基本模板并添加到其中。但是表单设计器表单只是模板,就像类定义一样。

现在,在运行时,实例化一个基本形式和衍生形式,它从存储在您的应用程序的资源部分模板创建它们。如果你添加了一些基本形式的情况下,你正在修改的单个实例,而不是定义,所以当然它不会出现在另一个实例。如果要动态地添加一个按钮形式,你必须在该实例(在这种情况下,派生形式)单独创建它。

2

如果你的意思是“继承”的方式通常意味着,那么答案是否定的。 (通常情况下,我的意思是你在IDE中创建了主表单,然后在IDE中创建了主表单的后代。)

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

你究竟想完成什么?如果你事先知道在底层和后代表单上都需要这个按钮(你显然是这样做的,因为你正在编写代码来创建按钮),为什么不把实际的按钮放在祖先上呢?

+0

呀 - 把它放在那里,但可使它不可见。只需在需要时将其视为可见。 – 2009-08-14 15:05:42

1

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