- L'evento
OnDestroy
di un modulo viene generato dal suo metodo BeforeDestruction
.
- Un componente distrugge i componenti di proprietà dal suo distruttore.
Il metodo BeforeDestruction
viene eseguito prima del distruttore e quindi il comportamento che si osserva.
È il caso che i componenti di proprietà vengono distrutti prima del loro proprietario. Immagina che fosse il contrario. Se il proprietario è stato distrutto per primo, l'elenco dei componenti di proprietà sarebbe stato distrutto e non ci sarebbe stato alcun modo per distruggere i componenti di proprietà.
Ciò che ti confonde è che quando un proprietario inizia il suo processo di distruzione, un certo numero di cose accade prima che raggiunga il punto in cui distrugge qualsiasi componente di proprietà. E una di queste cose è licenziare il proprio evento OnDestroy
.
L'albero delle chiamate per la distruzione del form principale sembra un po 'come questo:
TMainForm.BeforeDestruction
TCustomForm.BeforeDestruction
TCustomForm.DoDestroy
TMainForm.FormDestroy --> this is your main form's OnDestroy event handler
TMainForm.Destroy
TForm.Destroy
....
TComponent.Destroy
DestroyComponents; --> owned components are destroyed here
....
Con il tempo la forma principale ha chiamato DestroyComponents
da dentro la sua TComponent.Destroy
, tutti i componenti di proprietà sono state distrutte. Quindi il modulo principale completa il suo processo di distruzione e poi anche questo è stato distrutto.
fonte
2014-12-09 14:38:49
Vedo un altro vantaggio per questo ordine: All'interno dei gestori di eventi del modulo, tutti i componenti del modulo sono sicuri di esistere. Allo stesso modo, l'evento 'OnCreate' della forma si attiva * dopo * tutti i componenti di proprietà (preconfigurati) sono stati creati. In entrambi i casi, aiuta RAD ad avere tutto disponibile in * tutti * gli eventi di base. –
Per completezza, 'DoDestroy()' è chiamato in 'BeforeConstruction()' ** only ** se la proprietà 'OldCreateOrder' è false (che di solito è), altrimenti' DoDestroy() 'è chiamato in' Destroy del modulo() 'distruttore invece. –