unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
Form2 := TForm2.Create(self);
Form2.ShowModal ;
Form2.Free;//执行这一句一切正常
Form2.Free;//执行这一句Form1 将不可视,请问这是为什么 
end;end.附:
 
  Free  不是可以自动判断对象是否为空吗?  

解决方案 »

  1.   

    Form2.Free;//执行这一句一切正常
    Form2.Free;//执行这一句Form1 将不可视,请问这是为什么 
    都是form2.Free吗?执行这一句Form1 将不可视是什么意思。
    把代码改成FreeAndNil(Form2);试试
      

  2.   

    Form2.Free;//执行这一句一切正常
    Form2.Free;//执行这一句后Form1看不到了,按理说这不关Form1的事,请问这是为什么 为什么对Form2进行2次FREE 之后会导致FORM1不可视呢
      

  3.   

    D7下执行第二个Form2.Free时报错,感觉楼主问的问题没有意义
      

  4.   

    楼主为什么要free form2两次?
      

  5.   


    只是要讨论而已  !!!!
    第二个我也知道没有意义 
    但是如果你在两个FREE 之间加入一个MESSAGEBOX 
    那你肯定会有很大的麻烦 !
    不信你可以试一下 
    感谢各位朋友的参与 
    现在本人结贴。