我正在使用别人的代码,我正在添加一个新表单
所以,我已经创建了表单,我可以打开它,使用按钮和列表等,但我在使用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的原因是因为这就是我正在使用的代码正在做的事情,它似乎正在工作
谢谢!
你可能忘了分配FormCreate给OnCreate.我个人通过重写构造函数来做到这一点,因此保持.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)