我已将TFrame
的后代类注册为组件,我注意到Loaded
过程执行了两次:
运行:
TMyFrame = class(TFrame)
private
protected
procedure Loaded(); override;
public
constructor Create(AOwner : TComponent); override;
end;
constructor TMyFrame.Create(AOwner : TComponent);
begin
ShowMessage('Before TMyFrame.Create');
inherited Create(AOwner);
ShowMessage('After TMyFrame.Create');
end;
procedure TMyFrame.Loaded();
begin
ShowMessage('Before TMyFrame.Loaded');
inherited;
ShowMessage('After TMyFrame.Loaded');
end;
设计时:
procedure Register;
begin
RegisterComponents('Test', [TMyFrame]);
end;
输出:
在运行时,创建一个有TMyFrame
组件的表单。
在TMyFrame.Create之前
在TMyFrame.Loaded之前
TMyFrame.Loaded
之后TMyFrame.Create
之后在TMyFrame.Loaded之前
TMyFrame.Loaded
之后
在设计时,将TMyFrame
添加到表单:
在TMyFrame.Create之前
在TMyFrame.Loaded之前
TMyFrame.Loaded
之后TMyFrame.Create
之后
在设计时,打开一个有TMyFrame
组件的表单:
在TMyFrame.Create之前
在TMyFrame.Loaded之前
TMyFrame.Loaded
之后TMyFrame.Create
之后在TMyFrame.Loaded之前
TMyFrame.Loaded
之后
为什么Loaded
过程执行两次?怎么避免这个?
答案 0 :(得分:7)