2010-12-01 83 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”));