如何避免两次调用Application.CreateForm?

Rol*_*son 5 delphi delphi-2007

我偶然发现了这个页面为什么我不应该调用Application.CreateForm.现在我有一些像这样的代码:

SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update; // force update
Application.Initialize;
Application.CreateForm(TClientData, ClientData);
SplashForm.Update; // force update
Application.CreateForm(TClientMainForm, ClientMainForm);
Application.ShowHint := True;

Application.Run;
ClientMainForm.ServerConnected := false;
FreeAndNil(ClientMainForm);
FreeAndNil(ClientData);
Run Code Online (Sandbox Code Playgroud)

首先创建一个splashform,然后创建一个datamodule并持续主窗体.页面说不应该调用Application.CreateForm两次.上面的代码应该改变吗?

Too*_*the 5

多次使用Application.CreateForm没有任何问题.但是这会为每种形式引入全局变量,这些变量可能是代码气味.不幸的是,IDE为每个表单创建一个.虽然你可以删除它们,如果你愿意.

更好的方法是在需要时创建表单,并在准备好表单时将其释放.因此,您只能将Application.CreateForm用于主窗体.

主数据模块可以由主表单创建.但它也可以是全球性的,只是品味问题.

因此,要回答这个问题,可以通过在本地创建和发布表单来避免Application.CreateForm.

文章提到了Application.CreateForm的副作用(第一个完成的表单是主窗体).因此,如果主窗体使用Application.CreateForm创建其他窗体,则可能会出现意外的副作用.

所以为了避免任何讨厌,你应该将yoursef限制为一次通话.这只使用一个全局表单完成.

  • @Warren:这个评论根本没有任何意义.除了主要的表单变量之外,Delphi应用程序不需要使用那些全局变量的*any*,并且主表单中的一个可以很容易地被项目文件中的变量替换,而这个变量是不知道的.任何其他单位,所以它也不是真正的全局变量. (4认同)