为什么FormCreate会出现问题,但在FormShow中工作正常?

时间:2010-07-16 03:04:20

标签: delphi delphi-7

我正在使用Delphi 7.当我尝试在FormCreate中创建一个对象时,它失败了(实际上它只是挂起)。当我尝试在FormShow中做同样的事情时,它的工作原理。请注意,我不是在谈论创建像TEdit这样的可视组件。它是一个数据库抽象对象。任何想法为什么会这样?是否有关于此主题的指南?

2 个答案:

答案 0 :(得分:2)

我的第一个猜测是你正在访问尚未创建的DataModule。如果项目的来源如下所示:

begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TDataModule1, DataModule1);
    Application.Run;
end.

您的TForm1.FormCreate如下所示:

begin
    DataModule1.AddUsersToStringList(Self.ComboBox1.Items);
end;

然后FormCreate将失败,因为它是作为Application.CreateForm(TForm1, Form1);行的一部分运行的,而您的数据模块尚未创建。

有两种解决方案:

  1. 推迟处理/初始化,直到创建完所有表单和数据模块。
  2. 在创建任何表单之前创建所有数据模块。 Delphi中应用程序的“主窗体”是由TCustomForm创建的第一个Application.CreateForm后代,而不是第一个对象。

答案 1 :(得分:2)

1)原因是因为在FormCreate上,还没有创建Form的句柄。

如果您的数据库对象需要表单句柄,请执行以下操作:

Self.HandleNeeded; //在FormCreate上。

2)另一个原因可能是您的数据库组件需要连接并且它只在DFM上连接?