FormCreate在Delphi中的问题

Kin*_*ong 4 forms delphi

我正在使用别人的代码,我正在添加一个新表单

所以,我已经创建了表单,我可以打开它,使用按钮和列表等,但我在使用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;
Run Code Online (Sandbox Code Playgroud)

在我的TForm5中,我有一个程序

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

但它没有做任何事情

我也有

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

它被分配给一个按钮,这实际上可以工作并填充我的ListBox

我一直在网上查找它,似乎没有OnCreate函数,有一种方法可以覆盖它,但似乎应该有一种方法来定义框架首次创建时会发生什么

另外,我使用FormCreate的原因是因为这就是我正在使用的代码正在做的事情,它似乎正在工作

谢谢!

Dav*_*nan 5

你可能忘了分配FormCreateOnCreate.我个人通过重写构造函数来做到这一点,因此保持.dfm表单不受影响.

顺便说一句,我想评论你写的代码:

DefForm := TForm5.Create(Self);
Self.Visible := False;
try
  DefForm.ShowModal;
finally
  Self.Visible := True;
  DefForm.Release;
end;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

  • 原始代码中的@daemon尝试只保护赋值可见.它不能正确保护DefForm的生命周期.可能会在self.visible:= false中引发异常,然后表单将被泄露.通常尝试只能保护之前的线路. (2认同)