如何通过窗体的类名动态地创建窗体。不用以下的类似方法(因为不够灵活):
......
var
frm1:tform1;
begin
frm:=tform1.create(self);
frm.showmodal;
frm.free;
frm:=nil;
...... 我要达到的目的是,通过传入一个字符串参数(记录Form类名),创建相应的窗体。
......
var
frm1:tform1;
begin
frm:=tform1.create(self);
frm.showmodal;
frm.free;
frm:=nil;
...... 我要达到的目的是,通过传入一个字符串参数(记录Form类名),创建相应的窗体。
用Tform来做个试验吧。
1、新建工程,主form为form1,保存为unit1,添加一个form2,保存为unit2。
2、 在unit2中TForm2 = class(TForm)前面加上
TmyForm = class of Tform2;//相当于给Tform2加上一个别名
3、 在form1的FormCreate中写入RegisterClasses([TForm2]);//注册Tform2类
4、 在form1的button的单击事件中加入
var
A : Tform ;
begin
if GetClass('TForm2') =nil then exit ;
a := TMyform(GetClass('TForm2')).Create(nil);
a.show;
end;
搞定!
var
Form: TForm;
begin
Form := FormClass.Create(Application);
try
Form.ShowModal;
finally
Form.Free;
end;
end;调用
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateMyForm(TForm1);//tform1可以换成任意从TForm派生的类,如TForm3
end;