我已經註冊爲成分的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後」。 –