a,b是指针变量,指向被创建的窗体。即使窗体已经释放了,他们还是指向那段内存。
除非你直接使用a,b,否则你不可能把他们指向nil吧?

解决方案 »

  1.   

    如果在onclose函数内可以看到变量a,b的话,只要判断self的值是否相等就可以了。
      if a = self then a := nil;
      if b = self then b := nil;
      

  2.   

    a,b是指针变量,指向被创建的窗体;
    你只要在OnClose中写上
    Action := Cafree;
    MyForm := Nil
    就行了
      

  3.   

    在创建时加上一个判断
      if assigned(a) then 
        a:=Tmyform.create(self);
    在onclose事件里可这样写
      Action := Cafree;
      a := Nil;
    这样就可以保证对象a只有一个实例
      

  4.   

    不好意思写错了应该是;
    在创建时加上一个判断
      if not assigned(a) then 
        a:=Tmyform.create(self);
    在onclose事件里可这样写
      Action := Cafree;
      a := Nil;
    这样就可以保证对象a只有一个实例
      

  5.   

    实例名称不能在父类中释放
    必须自己释放
    Action := Cafree;可以写在父类中
    但A := nil;一般是写在A.onclose事件中
      

  6.   

    直接在OnDestroy事件中将所有相关的对象变量赋值为nil即可。