一些数据库应用程序开发人员更喜欢在主窗体之前通过编辑项目源文件来创建数据模块,如此
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDM, DM);
Application.CreateForm(TMainForm, MainForm);
{...}
Application.Run;
end.
问题是 - 为什么?什么是利弊?
答案 0 :(得分:15)
显而易见的原因是,主窗体需要数据模块进行设置。例如,如果主要表单在其OnCreate中引用了某些内容,那么数据模块当然必须先准备就绪。
否则,它并不重要。
答案 1 :(得分:6)
我同意梅森的回答,因为它解释了为什么人们会这样做。但是,我认为这是一种糟糕的方法,因为它隐藏了IDE维护的代码中的依赖性。在我看来,数据模块应该从自动创建列表中删除,它应该在主窗体的OnCreate方法中创建。
答案 2 :(得分:5)
这一个真的有两个阵营,两者都是正确的。
第一个让应用程序管理每个表单/数据模块的生命周期。在这种情况下,如果主窗体使用数据模块,则必须先创建它才能使用它。这适用于小型应用程序,但是当您使用多个表单到达更大的应用程序时会有一个加载开销...但是一旦加载了应用程序,那么显示表单几乎是即时的,因为它已经在内存中创建。因为已经创建了每个表单/资源,所以在运行应用程序时也会有大量内存。当您向应用程序添加新表单/数据模块时,此方法是Delphi“引导”您的默认方法。如果你没有在mainform的OnCreate中使用datamodule,那么它可以在创建顺序中更低,因为在Application.Run启动之后它不会被调用。
第二阵营希望处理每个表单/数据模块本身的创建和销毁(通常用于除MainForm之外的所有表单)。此方法的优点是应用程序加载速度更快,并且在启动时立即消耗更少的内存。通常在这种情况下,它是完全管理他们使用的每个表单/数据模块的生命周期的主要形式(或其他形式)。此方法最适用于具有多种形式的大型应用程序。
答案 3 :(得分:0)
仅仅因为这是确保MainMorm可以使用DataModule内容的最懒惰的方法。 如果您只有一个DataModule,那就没问题了。
答案 4 :(得分:0)
在创建所有其他组件之前,不会显示MainForm。所以基本上你会等待两种情况,首先创建天气数据模块。如果您的网格位于主窗体上,那么当您尝试从数据模块表(或查询)事件(开放后)中使用此类内容时,您可能会遇到麻烦:
cxGrid1DBTableView1.Controller.TopRowIndex :=0;
cxGrid1DBTableView1.DataController.FocusedRowIndex := 0;
原因很明显:网格尚未创建..我必须承认,我还首先创建了数据模块。但是有一些原因,比如我刚刚描述的原因,当这样做是不切实际的时候。