參看帖子
可以用乙個 tstrings 來維護這個對應關係,在增加乙個 node 的之後,增加乙個 object 到 tstrings,刪除乙個 node 之後,在 tstrings 也同時刪除那個 item。做 clear 的時候,先 treeview.items.clear, 再 strings.clear。下面是乙個例子(增加、刪除節點時根本不用重新整理的):
var fidlist: tstrings;
procedure tform1.formcreate(sender: tobject);
begin
// 建立 tstrings 的物件 fidlist
fidlist := tstringlist.create;
end;
procedure tform1.formdestroy(sender: tobject);
begin
// 清除物件 fidlist
treeview1.items.clear; // 很重要,不然會出錯
fidlist.destroy;
end;
procedure tform1.addnodeclick(sender: tobject);
var node: ttreenode;
text: string;
begin
// 實際操作的時候,text 和 id 都是從資料庫中讀出的
text := 'text' + inttostr(treeview1.items.count);
node := treeview1.items.addchild(nil, text);
fidlist.addobject('id_' + text, node);
end;
procedure tform1.treeview1deletion(sender: tobject; node: ttreenode);
begin
// 刪除節點時同時刪除關聯
fidlist.delete(fidlist.indexofobject(node));
end;
procedure tform1.delnodeclick(sender: tobject);
begin
// 刪除節點
if treeview1.selected <> nil then
treeview1.selected.delete;
end;
procedure tform1.getnodeclick(sender: tobject);
var node: ttreenode;
begin
// 通過 id 訪問 node
if fidlist.indexof(edit1.text) >= 0 then
begin
node := ttreenode(fidlist.objects[fidlist.indexof(edit1.text)]);
showmessage(node.text);
end;
end;
procedure tform1.showselidclick(sender: tobject);
begin
// 取得乙個節點對應的 id 值
if treeview1.selected <> nil then
showmessage(fidlist.strings[fidlist.indexofobject(treeview1.selected)]);
end;
Cayley凱萊定理 一一對應
過 n 個有標誌頂點的樹的數目等於 n 此定理說明用 n 1 條邊將 n 個已知的頂點連線起來的連通圖的個數是 n 也可以這樣理解,將n個城市連線起來的樹狀網路有 n 種可能方案.所謂樹狀,指的是用 n 1 條邊將 n 個城市連線起來,即無環。當然,建造乙個樹狀網路一般是求其長度最短或造價最少等.c...
DLL程式設計一一對應標頭檔案約定
vc程式設計中我們一般採用 stdcall呼叫約定,並且生成的dll希望在c編譯環境下也能成功執行,所以我們通常在編寫dll時,在標頭檔案中一般新增如下定義 define exports 1 ifdef cplusplus ifdef exports define dll export extern...
hibernate 註解 一對多 唯一索引
今天被hibernate和mysql整了一下,切身感受到索引的重要性。我用的是hibernate註解的一對多對映,如下 onetomany cascade cascadetype.all,fetch fetchtype.lazy jointable name user followby joinco...