Как я могу моделировать OnDestroy
событие для a TFrame
в Delphi?
я nievely добавленный a constructor
и destructor
к моему кадру, думая, именно это TForm
делает:
TframeEditCustomer = class(TFrame)
...
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
...
end;
constructor TframeEditCustomer.Create(AOwner: TComponent)
begin
inherited Create(AOwner);
//allocate stuff
end;
destructor TframeEditCustomer.Destroy;
begin
//cleanup stuff
inherited Destroy;
end;
Проблема с этим состоит в том, что к этому времени мои выполнения деструктора, средства управления на кадре были уничтожены и больше не действительны.
Причина этого находится в содержании деструктора формы, который это использует для огня OnDestroy
событие:
destructor TCustomForm.Destroy;
begin
...
if OldCreateOrder then DoDestroy; //-->fires Form's OnDestroy event; while controls are still valid
...
if HandleAllocated then DestroyWindowHandle; //-->destroys all controls on the form, and child frames
...
inherited Destroy; //--> calls destructor of my frame
...
end;
Деструктор моего объекта кадра называют, когда деструктор формы работает. Проблема с этим состоит в том, что слишком поздно. Вызовы формы DestroyWindowHandle
, который просит, чтобы Windows уничтожил дескриптор окна формы. Это рекурсивно уничтожает все дочерние окна - включая дочерние окна на моем кадре.
Таким образом, когда мой кадр destructor
выполнения, я пытаюсь к средствам управления доступом, которые больше не находятся в допустимом состоянии.
Как я могу моделировать OnDestroy
событие для a TFrame
в Delphi?