我想做一个函数,传入一个已经做好的窗体作为参数,然后创建此窗体的一个实例并显示。
如果用application.createform()则必须提供类名,请问怎样做!
(注意:不是新建窗体而是创建已经存在的窗体的实例!)
我的代码是:
function ShowForm(varForm:TForm):boolean;
begin
.
.
.
if (varForm = nil) then
Application.CreateForm( “这里不知怎末写",varForm);
varForm.Show;
Result := true;
.
.
.
end;

解决方案 »

  1.   

    有一段写错了,应该为:if application.findform('varForm')=nil then   //如果窗体varForm不存在(未被创建)
    begin
        application.createform(TvarForm,varForm);  
    end;varForm.show;
      

  2.   

    if assigned() then .......
      

  3.   

    if not assigned() then ......
      

  4.   

    问题主要是我得不到此窗体的类,即createform()的第一个参数!
      

  5.   

    诸位明白我的意思了吗?是createform()的问题!不是判断此窗口存不存在!
      

  6.   

    if (varform=nil) then
            varform:=Tform.Create(owner);
    varform.show;
    result:=true;
      

  7.   

    我想你的函数应该再增加一个参数,比较好控制。
    function ShowForm(InstanceClass:TComponentClass;varForm:TForm):boolean
    begin
    //
    //
    if (varForm = nil) then
    Application.CreateForm(InstanceClass,varForm);
    varForm.Show;
    Result := true;
    //
    end;调用:
    var
      Form2 : TForm2;
    begin
      showForm(TForm2,From2); 
    end;
      

  8.   

    谢谢楼上!但好像还有一个问题?按照你的方法创建的窗体一旦Close就会出错!
    我会给你分的!
      

  9.   

    to MichealLee() :
    TApplication 有FindForm()这个函数吗?
    我怎么找不到啊?
      

  10.   

    就是类之类的方法,kkk2000已经说的很清楚了
    至于Close出错,楼主最好检查一下窗体OnClose里的代码,我怀疑是那里有什么代码有问题
    也可能是OnDestroy里面!