try
 if not Assigned(Form2) then
 begin
   Form2:=TForm2.create(self);
   Form2.show;
 end else
   Form2.show;
finally
  form2.free;
  form2:=nil;
end;

解决方案 »

  1.   

    if Form2 = nil then
        Application.CreateForm(tForm2, Form2);
      Form2.ShowModal;
      

  2.   

    if not Assigned(Form2) then
        Form2:=TForm2.Create(Application);
      Form2.Show;
      

  3.   

    各位这样子不行呀,只要按二次按扭,就出现了两个Form2窗口了。
      

  4.   

    if not Assigned(Form2) then
     begin
       Form2:=TForm2.create(self);
       Form2.show;
     end else
       Form2.show;
    //form2的onclose 事件
     action:=cafree;
      

  5.   

    我刚开始也是用mdi子父窗体做程序,但后来不用了
      

  6.   

    wave_f(小浪花)可以给点建议吗?
    Email:[email protected]
      

  7.   

    var i,FormIndex:integer;
        FormExist:Boolean; //判断窗体是否存在FormExist:=false;
    for i:=0 to MainForm.MdiChildCount-1 do
     if MainForm.MdiChild[i].Name='Form2'(注意:大小写敏感) then
      begin
      FormIndex:=i; 
      FormExist:=true;
      end;
    if not(FormExist) TForm2.Create(self)
     else MainForm.MdiChild[FormIndex].show;说明:如果用TForm2.Create(self)创建子窗体,不能用Form2来引用它。
    如果TForm2有对应的单元文件Unit2({$ *.dfm}),而不只是定义的一个类,提倡用Application.CreateForm(TForm2,Form2)来创建,可以用Form2来直接引用。上述程序则可以改为:
    var i:integer;
        FormExist:Boolean;FormExist:=false;
    for i:=0 to MainForm.MdiChildCount-1 do
     if MainForm.MdiChild[i].Name='Form2'(注意:大小写敏感) then
      FormExist:=true;if not(FormExist) Application.CreateForm(TForm2,Form2)
     else Form2.show;另:MDI子窗体的默认关闭操作是最小化。在OnClose操作中加入Action:=caFree才能使它的关闭操作为真正的关闭(释放内存)