知道窗体名称后动态创建窗体的问题(100分)

  • 主题发起人 主题发起人 mrzj
  • 开始时间 开始时间
M

mrzj

Unregistered / Unconfirmed
GUEST, unregistred user!
我们设计窗体,如果窗体的Name属性值是Form1,则它的类名就是TForm1,创建它的办法是:TForm1.Create(application)。如果在程序中知道了tmpStr:='Form2',而且程序中也确实有TForm2,但是它是关闭的,怎样才能创建出Form2的窗体出来呢?

当然用IF语句是可以的,如:if tmpStr='from2' then TForm1.Create(application)这样行是行,但是现在这样的窗体特多,怎么能做出动态的呢?
 
if Assigned(Form2) then
begin
end;
 
我现在的程序是这样实现的
在代码的最后加这样的代码
initialization
RegisterClass(TFrmN_Affair_Bargain_Chang);
finalization
UnRegisterClass(TFrmN_Affair_Bargain_Chang);
然后,就可以直接的用了
 
你的意思就是根据字符串创建窗体吧:)
function mycreateform(sName:string):bolean;
var
formname:string;
formclass:tformclass;
begin
result:=false;
formname:='T'+sname; //
formclass:=Tformclass(findclass(formname));
//tempform00为一全局变量 tform类型
begin
tempform00:=formclass.Create(self);
...
result:=true;
end;
end;
//注:在主窗体的create事件中加上 当然还要你自己加上一些判断是否已经存在的代码,我就不写了
RegisterClass(Tform1);
RegisterClass(Tform2);
......
 
function TMainForm.FindForm(FormName,FormCaption: string): TForm;
var
FindForm:TForm;
FindFormClass:TFormClass;
classname:string;//窗体类名
begin
FindForm:=tform(FormName);
classname:='T'+formname;
FindFormClass:=TFormClass(Findclass(classname));
if FindFormClass<>nil then
begin
application.Createform(FindFormClass,FindForm);
FindForm.Caption:=FormCaption;
result:=FindForm;
end;
end;
 
多人接受答案了。
 
后退
顶部