2010-12-01 212 views
4

如何在C#WinForms的TreeView中的特定節點上插入新的子節點?C# - TreeView:在某個位置插入節點

我在的TreeView已經笨拙地刺向了差不多一個小時,我想用C#的TreeView的是這樣的:

treeView.getChildByName("bob").AddChild(new Node("bob's dog")); 

這裏就是我想最後一個(我認爲這是在毛羽水平哪些C#應該永遠不會讓我達到):

tree.Nodes[item.name].Nodes.Add(new TreeNode("thing")); 

不用說,它不起作用。

哦,這裏有一個懶惰的問題:你是否真的可以在這些節點中存儲對象?或者TreeNode只支持字符串和什麼? (在這種情況下,我應該延長TreeNode .. /嘆氣)

請幫助,謝謝!

+0

如果你可以自由選擇,看看WPF。您可以根據需要爲數據建模並將其綁定到TreeView。 – VVS 2010-12-01 21:23:47

+0

呵呵,老兄,如果我有選擇的話,我會轉而使用WPF。對於初學者來說,任何藉助XML的東西都是向前邁出的一步。 – Spectraljump 2010-12-01 21:50:14

回答

6

其實你的代碼應工作 - 爲了增加你只需要做一個子節點:

myNode.Nodes.Add(new TreeNode("Sub node")); 

也許問題出在你提到的現有節點的方式。 我猜測tree.Nodes [item.Name]返回null?

爲了使此索引器找到節點,您需要在添加節點時指定一個鍵。您是否將節點名稱指定爲密鑰?例如,下面的代碼爲我工作:

treeView1.Nodes.Add("key", "root"); 
treeView1.Nodes["key"].Nodes.Add(new TreeNode("Sub node")); 

如果我的回答是不行的,你可以添加什麼會發生更多的細節?你有沒有得到一些例外,或者什麼都沒有發生? PS:爲了在節點中存儲一個對象,而不是使用Tag屬性,還可以從TreeNode派生自己的類,並在其中存儲任何內容。如果您正在開發一個庫,這會更有用,因爲您要離開Tag屬性供用戶使用。

2

那麼,首先,是的,你可以在每個節點存儲對象。每個節點有一個Tag類型的屬性object

添加節點應該相當簡單。根據MSDN

// Adds new node as a child node of the currently selected node. 
TreeNode newNode = new TreeNode("Text for new node"); 
treeView1.SelectedNode.Nodes.Add(newNode); 
+0

嗖!謝謝你的提示。 – Spectraljump 2010-12-01 21:17:54

+0

關於你的編輯,我不會有一個「SelectedNode」添加到。所以這種方法(其中我讀btw)沒有幫助.. – Spectraljump 2010-12-01 21:35:27

3

您可以使用插入而不是添加。

tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing"))); 
0

否則,如果達維塔的是不完美的答案,你需要保留到節點的引用,所以如果你有一個參考鮑勃你可以添加Bob的狗

TreeNode的鮑勃=新的TreeNode( 「鮑勃」); treeView1.Nodes.Add(bob); bob.Nodes.Add(new TreeNode(「Dog」));