如何在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 .. /叹气)
请帮助,谢谢!
答案 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”));