我正在使用别人的代码,我正在添加一个新表单
所以,我已经创建了表单,我可以打开它,使用按钮和列表等,但我在使用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的原因是因为我正在使用的代码正在做什么,而且似乎正在运行
谢谢!
答案 0 :(得分:5)
您可能忘记将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;
答案 1 :(得分:4)
你的意思是,你的事件处理程序没有被执行? 如果是这样,您是否忘记将该过程分配给Form的OnCreate属性?
答案 2 :(得分:1)
好的,我在这里有点困惑。您是在谈论表单还是框架?表单有一个OnCreate处理程序,但框架没有。如果您想在创建框架时发生某些事情,请覆盖构造函数。我一直在网上查找它 好像没有OnCreate 功能,有一种方法可以覆盖 它似乎应该有一个 方式来定义什么时候会发生什么 首先创建框架
constructor TMyFrame.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
RunList := CModelList.Create;
RunList.ReadData;
RunList.FillList(ListBox1.Items);
end;
同样,框架没有OnDestroy,因此如果有任何需要清理的地方,请务必覆盖析构函数。