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

Spe*_*ump 4 c# treeview treenode insert winforms

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

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

treeView.getChildByName("bob").AddChild(new Node("bob's dog"));
Run Code Online (Sandbox Code Playgroud)

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

tree.Nodes[item.name].Nodes.Add(new TreeNode("thing"));
Run Code Online (Sandbox Code Playgroud)

不用说,它不起作用.

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

请帮忙,谢谢!

Dav*_*ita 6

您可以使用Insert而不是Add.

tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing")));
Run Code Online (Sandbox Code Playgroud)


Ran*_*Ran 6

实际上你的代码应该工作 - 为了添加你只需要做的子节点:

myNode.Nodes.Add(new TreeNode("Sub node"));
Run Code Online (Sandbox Code Playgroud)

也许问题在于您引用现有节点的方式.我猜那棵tree.Nodes [item.Name]返回null?

为了使此索引器能够找到节点,您需要在添加节点时指定密钥.您是否将节点名称指定为键?例如,以下代码适用于我:

treeView1.Nodes.Add("key", "root");
treeView1.Nodes["key"].Nodes.Add(new TreeNode("Sub node"));
Run Code Online (Sandbox Code Playgroud)

如果我的答案不起作用,您能否添加更多详细信息?你得到了一些例外,或者没有发生什么事吗?

PS:为了在节点中存储对象,而不是使用Tag属性,您还可以从TreeNode派生自己的类并在其中存储任何内容.如果您正在开发库,这更有用,因为您要离开Tag属性供您的用户使用.