我想將 Treenodes 與我自己的物件一起使用,并像這樣宣告它們:
MyObject1 = class(TTreeNode)
aValue1 : integer;
Public
constructor Create(Owner: TTreeNodes);
procedure .......
end;
MyObject2 = class(MyObject1)
aValue2 : integer;
public
constructor Create(Owner: TTreeNodes);
procedure ......
end;
在TreeView.OnCreateNodeClass事件中,我設定:
NodeClass := MyObject2;
然后當我在我的樹中創建一個新節點時:
TreeNode := TreeView1.Items.AddChild(ParentNode, '');
我相信這MyObject2.Create會被呼叫,但事實并非如此。已MyObject2按原樣創建,因此我可以訪問欄位aValue1以及aValue2創建節點的時間,但我想在建構式中初始化它們。
有人對此有任何想法嗎?
uj5u.com熱心網友回復:
您需要添加override到每個建構式以確保它們將被呼叫。您還必須確保inherited在每個建構式實作中呼叫。
已
MyObject2按原樣創建,因此我可以訪問欄位aValue1以及aValue2何時創建節點,但我想在建構式中初始化它們。
我不認為這是真的。我認為當您嘗試訪問這些欄位時,您只會訪問實際節點實體之外的一些隨機記憶體部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/511494.html
標籤:德尔福
上一篇:當WINAPI呼叫我的代碼并引發例外時,我應該捕獲它并回傳HRESULT嗎?
下一篇:路徑質心計算
