FormCreate在Delphi中的问题

时间:2011-05-12 16:59:10

标签: delphi forms

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

所以,我已经创建了表单,我可以打开它,使用按钮和列表等,但我在使用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 个答案:

答案 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,因此如果有任何需要清理的地方,请务必覆盖析构函数。