我有一個TLMDDockPanel部件作爲父的框架,在框架上有一個TTreeView控件:樹視圖項目的對象引用在斷開連接後發生更改?
unit devices;
...
Tmaster = class(TObject)
...
devTreeNode : ttreenode;
...
end;
...
end.
unit deviceTree;
...
TfrmDevTree = class(TFrame)
JvTreeView1: TTreeView;
...
end;
procedure TfrmDevTree.GetSlavesOnSelectedClick(Sender: TObject);
var
Node: TTreeNode;
begin
...
Node := self.JvTreeView1.Selected;
...
end;
...
end.
unit mainForm;
...
TfrmMain = class(TForm)
...
LMDDockSite1: TLMDDockSite;
LMDDockPanel_DevTree: TLMDDockPanel;
...
var
frmDevTree : TfrmDevTree;
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
...
frmDevTree := TfrmDevTree.Create(self);
frmDevTree.Parent := LMDDockPanel_DevTree;
...
end;
...
end.
在應用程序開始,我填「數據」字段JvTreeView1的所有節點:
master := Tmaster.create;
Node.Data := master;
master.devtreenode := node; //I also save the treenode that is representing the master in JvTreeView1 into a master field.
默認情況下,LMDDockPanel_DevTree停靠面板停靠在停靠點的左側,停靠面板坐在那裏時沒有任何問題,但是在取消停靠後,該目標。 treenodes的引用正在改變,所以存儲在主引擎(master.devtreenode)中的引用不再有效。 有人可以解釋爲什麼treenode引用會改變嗎?如何避免這種情況?每次我停靠/取消停靠面板時,是否應刷新存儲在主人中的所有參考?
謝謝。
爲什麼你在'TMaster'類中存儲對TreeNode的引用?沒有理由這樣做,而且你將你的對象綁定到你的UI上,這是糟糕的設計。 –
那麼這些引用對於TMaster的內部工作並不重要,但你可能是對的。 – grinner