使用treeview将childnode添加到childnode

问题描述 投票:0回答:3

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

我使用下面的代码;

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

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

c# winforms
3个回答
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

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");

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");
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.