代码之家  ›  专栏  ›  技术社区  ›  kludg

在主窗体之前创建的数据模块

  •  5
  • kludg  · 技术社区  · 16 年前

    一些数据库应用程序开发人员喜欢在主窗体之前通过如下方式编辑项目源文件来创建数据模块

    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TDM, DM);
      Application.CreateForm(TMainForm, MainForm);
    {...}
      Application.Run;
    end.
    

    问题是——为什么?什么是正反两面?

    5 回复  |  直到 15 年前
        1
  •  17
  •   Mason Wheeler    16 年前

    显而易见的原因是,如果主窗体需要数据模块进行设置。例如,如果主窗体在其OnCreate中引用了其中的某些内容,那么当然数据模块必须首先准备好。

    否则,这并不重要。

        2
  •  6
  •   Lawrence Barsanti    16 年前

    我同意梅森的回答,因为它解释了为什么人们会这样做。然而,我认为这是一种糟糕的方法,因为它隐藏了IDE维护的代码中的依赖关系。在我看来,数据模块应该从自动创建列表中删除,并且应该在主窗体的OnCreate方法中创建。

        3
  •  5
  •   skamradt    16 年前

    第二个阵营希望处理每个表单/数据模块本身的创建和销毁(通常用于除主表单之外的所有表单)。这种方法的优点是,应用程序在启动时加载速度更快,占用的内存更少。通常在这种情况下,主表单(或其他表单)完全管理它们使用的每个表单/数据模块的生命周期。此方法最适用于具有多种形式的大型应用程序。

        4
  •  0
  •   Fabricio Araujo    16 年前

    只是因为这是确保DataModule内容可供MainForm使用的最懒惰的方法。 如果您只有一个数据模块,就不会有问题。

        5
  •  0
  •   user763539    12 年前

    在创建所有其他组件之前,不会显示MainForm。所以基本上你们会在这两种情况下等待,天气数据模块是否先创建。如果您的网格位于主窗体上,则在尝试从数据模块表(或查询)事件(打开后)中使用类似的内容时可能会遇到麻烦:

    cxGrid1DBTableView1.Controller.TopRowIndex :=0;
    cxGrid1DBTableView1.DataController.FocusedRowIndex := 0;
    

    推荐文章