使用treeview将childnode添加到childnode

时间:2017-12-15 13:54:12

标签: c# winforms

我想将子节点添加到子节点。

我使用下面的代码;

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

然而它总是失败。它没有'找到父节点。我该怎么办?

3 个答案:

答案 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");
}

现在,我知道代码是丑陋的,但从中获得的主要想法是:

  1. TreeView控件包含TreeNode个对象列表(Nodes)。此列表不是树中所有节点的列表,只是那些作为控件本身的直接子节点的列表。
  2. 必须将父节点下存在的任何子节点添加到父节点的TreeNode对象列表中。
  3. 每个TreeNode对象都包含一个TreeNode个对象的列表。
  4. 当您将TreeNode添加到另一个节点或TreeView控件本身时,会返回对新TreeNode对象的引用。
  5. TreeNode的索引是与其所在列表相关的索引 - 而不是与整个层次结构相关的索引。
  6. TreeNode对象有几个有助于导航树的属性。 PrevNodeNextNode获取上一个或下一个兄弟树节点(如果存在)。并且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");