如何确定初始化和最终确定的顺序?

时间:2017-10-03 10:45:44

标签: delphi delphi-xe6

我一直认为表单生命周期的正确顺序是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

所以我想知道,在这种情况下,如何控制确切的订单或者至少是什么导致了这种变化?

1 个答案:

答案 0 :(得分:7)

如果您从未致电Application.Run,则会在Application.CreateForm中释放自动创建的表单(或使用FinalizeUnits创建的任何表单),而不是在主表单关闭时释放。

通常Application.Run指定调用ExitProc的{​​{1}} - 这会枚举应用程序拥有的窗口并在调用DoneApplication之前释放它们。如果未调用FinalizeUnits,则表示没有分配Application.Run,并且在调用ExitProc之前不会释放表单。