C# - TreeView:在特定位置插入节点

时间:2010-12-01 21:14:26

标签: c# winforms treeview insert treenode

如何在C#WinForms中的TreeView中将新子项插入特定节点?

我在TreeViews上笨拙地刺了将近一个小时,我想像这样使用C#的TreeView:

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

这是我上次尝试的(我认为C#应该永远不会让我达到的毛茸茸程度):

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

毋庸置疑,它不起作用。

哦,这是一个懒惰的问题:你真的可以在这些节点中存储对象吗?或者TreeNode只支持字符串和诸如此类的东西? (在这种情况下,我应该扩展TreeNode .. /叹气)

请帮助,谢谢!

4 个答案:

答案 0 :(得分:6)

您可以使用Insert而不是Add。

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

答案 1 :(得分: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 :(得分:3)

嗯,首先,是的,您可以在每个节点中存储对象。每个节点都具有Tag类型的object属性。

添加节点应该相当简单。根据{{​​3}}:

// 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);

答案 3 :(得分:0)

否则,如果Davita不是完美的答案,你需要保留对节点的引用,所以如果你有bob的引用你可以添加bob的狗

TreeNode bob = new TreeNode(“bob”); treeView1.Nodes.Add(BOB); bob.Nodes.Add(new TreeNode(“Dog”));