比如有一个AlreadyFree()函数,就可以这样
if AlreadyFree(Form) then
  Form := nil
else
begin
  Form.Free;
  Form:nil;
end;

解决方案 »

  1.   

    if Assigned(Form) then
      FreeAndNil(Form);
      

  2.   

    if FindComponent('form名')=nil then
        begin
           //......
        end
        else
        begin
            form.Free;
        end;
      

  3.   

    即使Form已经Free,因为Form不为nil,所以此时Assigned(Form)返回True;
      

  4.   

    Form自己关闭时在Close事件中设置关闭参数为caFree,即可自己释放内存,但指向窗口的变量并不自动设为nil,故在Destroy事件中将其设为nil。
    上面所说的Form一般为非模式调用,故
    if not Assigned(Form) then
      Form := TForm.Create(self);
    即可,Form关闭由Form自己决定,传参数self后,若此窗口关闭则Form也关闭。
    具体问题在《开发人员指南5》中有非常详细的介绍。
      

  5.   

    happyggy(阿牛De牛)的方法可行
     HeLiang7(阿亮) 的方法只有直接使用默认的窗体变量的情况下有用,如果动态创建时使用的是自定义的变量myForm:TForm1,myForm := TForm1.create();应该无效