4

如何在 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 .. /sigh)

请帮忙,谢谢!

4

4 回答 4

6

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

tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing")));
于 2010-12-01T21:20:10.553 回答
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:为了在节点中存储一个对象,你也可以从TreeNode派生出你自己的类,而不是使用Tag属性,并在其中存储任何东西。如果您正在开发一个库,这将更加有用,因为您将 Tag 属性留给您的用户使用。

于 2010-12-01T21:24:14.870 回答
3

好吧,首先,是的,您可以在每个节点中存储对象。每个节点都有一个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);
于 2010-12-01T21:17:11.773 回答
0

否则,如果 Davita's 不是完美的答案,您需要保留对节点的引用,因此如果您有对 bob 的引用,则可以添加 bob's dog

TreeNode bob= new TreeNode("bob"); treeView1.Nodes.Add(bob); bob.Nodes.Add(new TreeNode("Dog"));

于 2010-12-01T21:21:30.927 回答