那么应该如何判断一个Form已经释放了呢?

解决方案 »

  1.   

    通常就
    if assigned(myFormvar) and (myFormvar <> nil) then XXX
      

  2.   

    如果这样,全局变量myFormVar:TFTEST;
    button1事件中,
    myFormVar:=TFTEST.create;
    myFormVar.showModal;执行后,弹出一模特窗口,点关闭(close事件里action := caFree),应该是释放了该Formbutton2事件中,
    assigned(myFormvar) 为true
    (myFormvar  < > nil) 为true
      

  3.   

    Assigned是用来判断一个对象是否为nil,Delphi对象Free后,并不=nil,所以用Assigned不能进行有效判断,必须将对象设置为nil
      

  4.   

    Assigned是用来判断一个对象是否不为nil
      

  5.   

    但是在FormTEST窗口中,close事件中caFree,self := Nil(或者FFormTest := Nil),还是无济于事。
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(Form2) then
        Form2 := TForm2.Create(Application);
      if not Form2.Visible then
        Form2.Show;
    end;end.unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm2 = class(TForm)
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;procedure TForm2.FormDestroy(Sender: TObject);
    begin
      Form2 := nil;
    end;end.
      

  7.   

    myFormVar:=TFTEST.create; 
    myFormVar.showModal; 
    可以不用CaFree的:myFormVar.Free;
    myFormVar := nil;
      

  8.   

    阿发伯你好,你的方法不行,测试还是跟以前一样。
    liuyang你好,因为程序中不是个模特窗口,是个appwindow,以及其它原因,不能在主窗口中free和nil
      

  9.   


    with TFTEST.Create( Owner ) do
    begin
      showmodal;
      destroy;
    end;
      

  10.   

    谢谢各位大侠。
    真奇怪,如果直接使用Form2变量就可以,如果定义全局变量yyy:TForm2,就不行。
      

  11.   

    定义全局变量yyy:TForm2
    那得要看其宿主对象了,如果是application则是在退出整个程序的时候又application来负责释放的
    如果是self或nil则用Freeandnil(yyy)应该可以满足assigned(yyy)为false
      

  12.   

    阿发伯
    你那个
    procedure TForm2.FormDestroy(Sender: TObject); 
    begin 
      Form2 := nil; 
    end; 
    这个Form2:=nil;中的Form2能不能用变量表示