在程序中调用 MDIChild  时首先检查是否已经Create,
  若未 CreateD Then Cteate it
  然后Show It
     
请问这如何实现,希望给出代码!

解决方案 »

  1.   

    if frmMDIChild <> nil then
       frmMDIChild := TfrmMDIChild.Create(Application)
    frmMDIChild.show;
      

  2.   

    to laihecongxi(兴哥):
      这个不行,因为 frmMDIChild free之后<>nil,所以第一次调用 frmMDIChild可以Create,而当关闭frmMDIChild后,frmMDIChild <> nil 就不会执行
      frmMDIChild := TfrmMDIChild.Create(Application)
      

  3.   

    if no assigned(frmmidchild) then
      frmMDIChild := TfrmMDIChild.Create(Application)
    frmMDIChild.show;
    如果没有创建实例,则创建以后SHOW,如果你只是CLOSE,并没有FREE,实例依然存在,所以直接SHOW
      

  4.   

    如果要保证程序万无一失,则建议如此做:1、子窗口的Close事件处理过程中加入:
    ...
      Action := caFree;
    ...2、子窗口的Destroy事件处理过程中加入
    ...
      frmMDIChild := nil;
    ...3、主程序建立子窗口的程序段,参阅rocktan(我是一条狗)的说明。
      

  5.   

    大家说的没错
    不过MDI子窗体,create后可以不用show :)
      

  6.   

    如何判断MDI子窗体Free了?注意:当它Free之后,frmmidchild<>nil  , assigned(frmmidchild)=True !frmmidchild<>nil,并不代表已被创建,并不代表它可用
      

  7.   

    for i:=0 to MDIChild.Count-1 do
    begin
      if MDIChild[i].ClassName = 'TForm1' then exit ;
      Form1 := TForm1.Create(nil);
      ...
    end;
      

  8.   

    引用:
    如何判断MDI子窗体Free了?注意:当它Free之后,frmmidchild<>nil  , assigned(frmmidchild)=True !frmmidchild<>nil,并不代表已被创建,并不代表它可用你在frmmidchild.Free后再写一个frmmidchild:=nil 就ok了,frmmidchild=nil了