我一直认为表单生命周期的正确顺序是initialization -> Create -> OnCreate -> OnDestroy -> Destroy -> finalization
,它适用于以下代码。
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TUMain, UMain);
Application.Run;
然而,当我做出一点改变时......
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TUMain, UMain);
if 1 = 2 then
Application.Run;
然后TUMain
订单更改为initialization -> Create -> OnCreate -> finalization -> OnDestroy -> Destroy
所以我想知道,在这种情况下,如何控制确切的订单或者至少是什么导致了这种变化?
答案 0 :(得分:7)
如果您从未致电Application.Run
,则会在Application.CreateForm
中释放自动创建的表单(或使用FinalizeUnits
创建的任何表单),而不是在主表单关闭时释放。
通常Application.Run
指定调用ExitProc
的{{1}} - 这会枚举应用程序拥有的窗口并在调用DoneApplication
之前释放它们。如果未调用FinalizeUnits
,则表示没有分配Application.Run
,并且在调用ExitProc
之前不会释放表单。