我想将子节点添加到子节点。
我使用下面的代码;
treeView1.Nodes.Add("0");
treeView1.Nodes["0"].Nodes.Add("1");
treeView1.Nodes["1"].Nodes.Add("2");
treeView1.Nodes["2"].Nodes.Add("3");
treeView1.Nodes["3"].Nodes.Add("4");
treeView1.Nodes["1"].Nodes.Add("5");
我想要的是这个;
0
1
2
3
4
5
然而它总是失败。它没有'找到父节点。我该怎么办?
答案 0 :(得分:1)
您遇到的问题是treeView1控件的Nodes
集合不是树中所有节点的列表 - 它只是顶级节点的列表。使其分层的是树节点可以包含子节点列表。因此,要获得您在问题中定义的树结构,您将需要执行以下操作:
private void AddTreeNodes()
{
// Create the root node.
TreeNode node = treeView1.Nodes.Add("0");
// the root node has only one child node (1), so we will reuse the node object
node = node.Nodes.Add("1");
// Now, the node is the parent of two nodes (2 and 5).
// We will want to keep track of node 2 because it has child nodes.
TreeNode anotherNode = node.Nodes.Add("2");
// Since node 5 doesn't have any child nodes, we don't need to keep track of it in this example.
node.Nodes.Add("5");
// Now, we need to make the child node of node 2. (Specifically, node 3).
node = anotherNode.Nodes.Add("3");
// And finally add the child node of node 3.
node.Nodes.Add("4");
}
你也可以这样做:
private void AddTreeNodes()
{
treeView1.Nodes.Add("0");
treeView1.Nodes[0].Nodes.Add("1");
treeView1.Nodes[0].Nodes[0].Nodes.Add("2");
treeView1.Nodes[0].Nodes[0].Nodes.Add("5");
treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes.Add("3");
treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0].Nodes.Add("4");
}
现在,我知道代码是丑陋的,但从中获得的主要想法是:
TreeView
控件包含TreeNode
个对象列表(Nodes
)。此列表不是树中所有节点的列表,只是那些作为控件本身的直接子节点的列表。TreeNode
对象列表中。TreeNode
对象都包含一个TreeNode
个对象的列表。TreeNode
添加到另一个节点或TreeView
控件本身时,会返回对新TreeNode
对象的引用。TreeNode
的索引是与其所在列表相关的索引 - 而不是与整个层次结构相关的索引。TreeNode
对象有几个有助于导航树的属性。 PrevNode
和NextNode
获取上一个或下一个兄弟树节点(如果存在)。并且Parent
获取当前节点的父TreeNode
。答案 1 :(得分:0)
它不起作用,因为Nodes[string]
在此集合中使用指定的键(这不是节点的)中寻找TreeNode
文本)。
TreeNodeCollection.Add
返回插入的TreeNode
。因此,使用此返回值来添加更多子节点:
TreeNode child = treeView1.Nodes.Add("0");
TreeNode child1 = child.Nodes.Add("1");
child1.Nodes.Add("2").Nodes.Add("3").Nodes.Add("4");
child1.Nodes.Add("5");
答案 2 :(得分:0)
我怀疑问题在于您使用的TreeNodeCollection.Add
方法accepts a string value是节点的文本而不是密钥。然后,您尝试通过密钥填充其他节点。
请尝试以下方法:
treeView1.Nodes.Add("0", "0");
treeView1.Nodes["0"].Add("1", "1");
treeView1.Nodes["0"].Nodes["1"].Add("2", "2");