我已经注册为组件 aTFrame
的后代类,我注意到该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 之后
在设计时,将 a 添加TMyFrame
到表单中:
在 TMyFrame.Create 之前
在 TMyFrame.Loaded 之前
在 TMyFrame.Loaded 之后
在 TMyFrame.Create 之后
在设计时,打开一个包含TMyFrame
组件的表单:
在 TMyFrame.Create 之前
在 TMyFrame.Loaded 之前
在 TMyFrame.Loaded 之后
在 TMyFrame.Create 之后
在 TMyFrame.Loaded 之前
在 TMyFrame.Loaded 之后
为什么Loaded
程序会执行两次?如何避免这种情况?