我已经注册为成分的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
后
在设计时,op付民的形式,其中有一个TMyFrame
成分:
之前TMyFrame.Create
TMyFrame.Loaded
之前后TMyFrame.Loaded
后TMyFrame.Create
之前TMyFrame.Loaded
TMyFrame.Loaded
为什么Loaded
过程被执行两次?如何避免这种情况?
如果使用调试DCU进行编译,您可以设置断点并查看调用堆栈。 –
*当*看到这些信息时?在IDE中?或在运行时?如果在IDE中您并不在意,那么可以使用针对componentstate = csDesigning的测试来包围消息。 – Dsm
@Dsm:“在运行时向表单添加TMyFrame后”。 –