请教:Form的OnDestroy事件中的代码执行次序,是在先释放Form中的组件,再执行OnDestroy中的代码吗?
释放应该是在析构函数里面自动进行的吧?

解决方案 »

  1.   

    看源码destructor TCustomForm.Destroy;
    begin
      if not (csDestroying in ComponentState) then GlobalNameSpace.BeginWrite;
      try
        if OldCreateOrder then DoDestroy;
        MergeMenu(False);
        if HandleAllocated then DestroyWindowHandle;
        Screen.RemoveForm(Self);
        FCanvas.Free;
        FIcon.Free;
        FreeAndNil(FActionLists);
        inherited Destroy;
      finally
        GlobalNameSpace.EndWrite;
      end;
    end;
      

  2.   

    自己建的窗口destroy时调用父类 TCustomForm.Destroy吗?下断点为什么不成功呢
      

  3.   

    写个测试程序就知道了,因oldcreateorder属性的不同而不同
    oldcreateorder = False,则ondestroy在组件释放之后,否则,在组件释放之前。
      

  4.   

    project -> options -> compiler -> use debug dcus
      

  5.   

    纠正一下 :
    因oldcreateorder属性的不同而不同
    oldcreateorder = False,则ondestroy在组件释放之前,否则,在组件释放之后。to s11ss: 自己写个程序确认一下再否定我也不迟。
      

  6.   

    你自己看下TCustomForm源码确认一下再否定我也不迟。
    你的测试肯定有问题。
      

  7.   


    s11ss,你是对的,被测试代码误导了,组件的释放总是在ondetroy事件之后。