Form1.FormStyle := fsMDIForm
Form2.FormStyle := fsMDIChild
Form2的Close事件中
action:=cafree;当Form2被关闭以后,点击Form1中的按纽要显示Form2procedure TForm1.Button1Click(Sender: TObject);
var
  a:=TForm2;
begin
  if not assigned(a) then
  begin
    a.create(application);
    a.showmodal;
  end;
end;显示不能
不知道是哪里出问题了,希望各位不吝赐教。另外,还有什么办法能判断窗体是否存在或显示?
开始时如何设置能让Form2不在程序运行时就显示出来?

解决方案 »

  1.   

    主窗体:
    TMainForm=class(TForm)
      ...
      public
        FSpecChild:TForm;
      ...
      end;创建子窗体时:
    if FSpecChild <> nil then
      FSpecChild := TChildForm.Create(self);
      ...在ChildForm的OnClose事件中:
    implementation
     uses Main;//主窗体的单元.
    ...
    TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      MainForm.FSpecChild := nil;
    end;
      

  2.   

    xuxiaozhao_3411(小小):
      那个是我觉得或许可以这样……
      当然,可能事实证明我很傻lovend(颓废之吻) :
      FSpecChild := TChildForm.Create(self);和FSpecChild := TChildForm.Create(application)有什么不一样呢?还有,如果是多个子窗体的话那窗体的判断是不是就不能用FSpecChild <> nil了?
    如果不能的话应该用什么来判断?我见过一种是用capion……觉得不好……
      

  3.   

    通过主窗体创建子窗体:
      if not assigned(frm_child) then //----判断子窗体指针是否存在?
        application.createform(Tfrm_child,frm_child)
      else
        begin
           frm_child.bringtofont;
        end;关闭子窗体;
     Tfrm_child.onclose();
       begin
         action:=cafree;
         frm_child:=nil;//---将指针清除;
       end; 
      

  4.   

    var
      a:=TForm2;           ???????????????????还"觉得或许可以这样"!!我真的搞不清楚了!
      

  5.   

    当然是 多子窗体了,难道只有一个子窗体呀 FSpecChild <> nil了?
    要在每个要创建的子窗体创建之前都要判断的。你慢慢研究吧。
      

  6.   


    Form1.FormStyle := fsMDIForm
    Form2.FormStyle := fsMDIChild 
    a.showmodal;//这里一定有问题啊 试一下a.show;
    你这个是 子窗体的怎么可以用 showmodal
      

  7.   

    谢谢楼上的刚开始学MDI,基础又不够
    所以可能表达上出些问题
    不好意思我自己再看看吧
    不知道什么书有MDI入门的讲解
    很多书都只是一点带过……