FormCreate в Delphi проблема - PullRequest
4 голосов
/ 12 мая 2011

Я работаю с чужим кодом и добавляю новую форму

Итак, я создал форму и могу открыть ее, использовать кнопки и список и т. Д., Но яУ меня проблемы с выполнением задач в formcreate.

Я делаю форму, выполняя это:

procedure TModelForm.RepeatOpen(Sender: TObject);
var
 DefForm : TForm5;
begin
 DefForm := TForm5.Create(Self);

 Self.Visible := False;
 try
  DefForm.ShowModal;
 finally
  Self.Visible := True;
  DefForm.Release;
 end;
end;

в моем TForm5, у меня есть процедура

procedure TForm5.FormCreate(Sender: TObject);
begin
 inherited;
 RunList := CModelList.Create;
 RunList.ReadData;
 RunList.FillList(ListBox1.Items);
end;

но он ничего не делает

У меня также есть

procedure TForm5.PopulateListClick(Sender: TObject);
begin
 RunList := CModelList.Create;
 RunList.ReadData;
 RunList.FillList(ListBox1.Items);
end;

, который назначен кнопке, и это на самом деле работает и заполняет мой ListBox

Я былпри поиске в сети, и кажется, что функции OnCreate нет, есть способ переопределить ее, но, похоже, должен быть способ просто определить, что происходит при первом создании фрейма

также,Причина, по которой я использую FormCreate, заключается в том, что именно этим занимается код, с которым я работаю, и он, кажется, работает

Спасибо!

Ответы [ 3 ]

5 голосов
/ 12 мая 2011

Возможно, вы забыли присвоить FormCreate OnCreate. Лично я бы сделал это, переопределив конструктор и сохранив при этом форму .dfm.

В заключение я хотел бы прокомментировать код, который вы написали:

DefForm := TForm5.Create(Self);
Self.Visible := False;
try
  DefForm.ShowModal;
finally
  Self.Visible := True;
  DefForm.Release;
end;

Вам не нужно назначать владельца на DefForm, поскольку вы берете на себя задачу очистки, хотя назначать владельца обычно не вредно. Более того, try/finally - это попытка сделать две работы, но она действительно может выполнить только одну. Звонить на Release не нужно, вы можете просто позвонить на Free.

Я бы написал так:

DefForm := TForm5.Create(nil);
try
  Self.Visible := False;
  try
    DefForm.ShowModal;
  finally
    Self.Visible := True;
  end;
finally
  DefForm.Free;
end;
4 голосов
/ 12 мая 2011

Вы имеете в виду, что ваш обработчик событий не выполняется?Если да, возможно, вы просто забыли назначить процедуру свойству OnCreate формы?

1 голос
/ 12 мая 2011

Я искал это онлайн, и это Похоже, что нет OnCreate функция, есть способ переопределить это, но кажется, что должно быть способ просто определить, что происходит, когда кадр сначала создается

ОК, я немного запутался здесь. Вы говорите о форме или рамке ? Формы имеют обработчик OnCreate, а кадры - нет. Если вы хотите, чтобы что-то произошло при создании фрейма, переопределите конструктор.

constructor TMyFrame.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 RunList := CModelList.Create;
 RunList.ReadData;
 RunList.FillList(ListBox1.Items);
end;

Аналогично, у фреймов нет OnDestroy, поэтому обязательно переопределите деструктор, если есть что-то, что вам нужно очистить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...