请问,OnClose和OnDestroy有何区别?对自动创建的Form及手工创建的Form又有何区别?是否需要在OnClose中action:=cafree,而在OnDestroy中form1:=nil谢谢~

解决方案 »

  1.   

    close的时候并没有释放窗口的资源.对手工和自动创建的窗口都是这样,所有没有明确释放的窗口的资源都是随主窗口的释放而释放的,问题就是伴随窗口申请的一些资源,比如内存数组,就不会释放.
    这就是说,destroy是对应create事件的.而close是对应show或showmodal事件的.
      

  2.   

    谢谢~那么Destroy是随着主窗口Destroy时一起调用的吧?
      

  3.   

    cafree对应CreateForm,free对应Create,当然有时候用destroy也可以,但是最好用free
      

  4.   

    一般而言,自动创建的窗口最好在其OnClose中写action:=cafree;
    动态创建的窗口:最好申明一个全局变量(不要用局变量)来引用窗口实例:
    var
      AForm:TMyForm;
    .....
    begin
      if Not Assigned(AForm) then
      begin
        AForm:=TMyForm.create(Application);
        AForm.Show
      end
      else
        AForm.Show;
    .......
      FreeAndNil(AForm);
    .....  
    end;
      

  5.   

    OnClose和OnDestroy只是顺序不同,OnClose在前而OnDestroy在后。
    OnClose最好加上Action := Cafree
    //下面TXX是某个窗体类
    Application.CreateForm和xx := TXX.create(application)在我看来没有什么本质的不同,属主都是APPLICATION。
    TXX.Create(AOwner: TComponent),AOwner是关键,如果是nil的话,一定要手动Free
    如果指定属主,那么可以手动,也可以不必手动,当AOwner被Free时,TXX的实例会被自动Free