Delphi中是否有任何方法可以在动态创建现有表单之前从现有表单继承?
我知道如何使用tobjects.create()
动态创建新表单,但我需要通过在创建新表单时继承该表单来创建一个与已创建表单完全相同的表单。
答案 0 :(得分:1)
var
Form2: TForm1;
begin
Form2 := TForm1.create(nil);
try
// now form2 is exactly "like" form1 when it was created
Form2.Top := Form1.Top;
Form2.Left := Form1.Left;
// now some of Form2's properties are like Form1's are now
Form2.ShowModal;
finally
Form2.Free;
end;
所以问题是,你是什么意思"喜欢"?如果自创建以来对Form1进行了运行时更改,则需要在创建后对form2应用相同的运行时更改。继承不能为你做到这一点。继承是"容器"而不是数据。复制"数据"在表单中,您需要编写一个过程,该过程需要将form2的所有属性值设置为form1的属性值。或者,也许,只需复制您关心的属性。
答案 1 :(得分:0)
试试这个
interface
uses Forms, SysUtils, Classes, Controls;
type
TCommonFormClass = class of TCommonForm;
TCommonForm = class(TForm)
private
// Private declaration
public
// Public declaration
constructor Create(Sender: TComponent); virtual;
end;
implementation
constructor TCommonForm.Create(Sender: TComponent);
begin
inherited Create(Sender);
// do other
end;
您的孩子表格将是这样的
type
TMyForm = class(TCommonForm)
private
// Private declaration
public
// Public declaration
end;
implementation
{$R *.dfm}
end.
创建子使用:
procedure CallChild;
var MyForm: TMyForm;
begin
MyForm:= TMyForm.Create(nil);
try
MyForm.ShowModal;
finally
MyForm.Free;
end;
end;