我已经注册为组件aTFrame
的后代类,我注意到Loaded
过程执行两次:
Runtime:
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;
Output:
在运行时,在创建一个表单时,其中有一个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 之后
Why the Loaded
程序执行两次?如何避免这种情况?
此行为是按照设计的。
Loaded http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.TComponent.Loaded
Loaded 可能会在继承的表单上被多次调用。它被称为
每次流入一级继承时。不要分配
重写 Loaded 方法中的内存,而不首先检查
之前的调用中尚未分配内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)