Почему что-то не работает в FormCreate, но прекрасно работает в FormShow? - PullRequest
1 голос
/ 16 июля 2010

Я использую Delphi 7. Когда я пытаюсь создать объект в FormCreate, он не работает (на самом деле он просто зависает) Когда я пытаюсь сделать то же самое в FormShow, это работает. Обратите внимание, я не говорю о создании визуального компонента, такого как TEdit. Это объект абстракции базы данных. Есть идеи, почему это может произойти? Есть ли какие-либо рекомендации по этой теме?

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

1) Причина в том, что в FormCreate дескриптор формы еще не создан.

Если вашему объекту базы данных нужен дескриптор формы, сделайте следующее:

Self.HandleNeeded; // на время FormCreate.

2) Другая причина, может быть, ваш компонент базы данных должен быть подключен, и он подключен только в DFM?

2 голосов
/ 16 июля 2010

Мое первое предположение - то, что вы обращаетесь к модулю данных, еще не создан. Если источник вашего проекта выглядит следующим образом:

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);, а ваш модуль данных еще не создан.

Есть 2 решения:

  1. Отложите обработку / инициализацию до тех пор, пока не будут созданы все формы и модули данных.
  2. Создайте все модули данных перед созданием любой из ваших форм. «Основная форма» приложения в Delphi - это первый TCustomForm потомок, созданный Application.CreateForm, а не первый объект.
...