我在做MDI的时候~
var formdefine:TForm;
begin
  Formdefine:=TForm.Create(self);
  Formdefine.FormStyle:=fsMDIChild;
  Formdefine.Show;
  Formdefine.WindowState:=wsMaximized;
  Formdefine.Free;
end;
运行的时候:
子窗体就不见了~望高手们能回答。

解决方案 »

  1.   

    你不能把它free的。你把窗体show出来后,程序还会往下走的。只要一过free,你的窗体就没的。
      

  2.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        pnl1: TPanel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        procedure CaptionRefresh;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      with TForm.Create(Application) do
      begin
        FormStyle := fsMDIChild;
        OnClose := FormClose;
        Show;
      end;
      CaptionRefresh;
    end;procedure TForm1.CaptionRefresh;
    begin
      Caption := '共有[ ' + IntToStr(Self.MDIChildCount) + ' ]个子窗体!';
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;end.
      

  3.   

    把Formdefine.Free;这一句去掉,
    程序执行完后再执行的这一句,
    这一句就是关闭窗体了!
      

  4.   

    Show方法不影响下面代码的执行,模态显示方法Showmodal会等到处理完新建窗口的代码再执行Formdefine.showmodal下面的代码,两种解决方式:
    (1)var formdefine:TForm;
    begin
      Formdefine:=TForm.Create(self);
      Formdefine.FormStyle:=fsMDIChild;
      Formdefine.Showmodal;
      Formdefine.WindowState:=wsMaximized;
      Formdefine.Free;
    end;
    (2)var formdefine:TForm;
    begin
      Formdefine:=TForm.Create(self);
      Formdefine.FormStyle:=fsMDIChild;
      Formdefine.Show;
      Formdefine.WindowState:=wsMaximized;
      //去掉
    end;
      在Formdefine的Onclose事件里面用,FreeAndNil(Formdefine)