C# 使用treeview将childnode添加到childnode

C# 使用treeview将childnode添加到childnode,c#,winforms,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

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

我使用下面的代码

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

然而,它总是失败。它找不到父节点。我该怎么办?

它不起作用,因为
节点[string]
正在使用指定的键(不是节点的文本)在此集合中查找
树节点

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

它不起作用,因为
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");

我怀疑问题在于您使用的是
TreeNodeCollection.Add
方法,它是节点的文本而不是键。然后尝试通过密钥填充其他节点

请尝试以下操作:

treeView1.Nodes.Add("0", "0");
treeView1.Nodes["0"].Add("1", "1");
treeView1.Nodes["0"].Nodes["1"].Add("2", "2");

我怀疑问题在于您使用的是
TreeNodeCollection.Add
方法,它是节点的文本而不是键。然后尝试通过密钥填充其他节点

请尝试以下操作:

treeView1.Nodes.Add("0", "0");
treeView1.Nodes["0"].Add("1", "1");
treeView1.Nodes["0"].Nodes["1"].Add("2", "2");

您遇到的问题是treeView1控件的
节点
集合不是树中所有节点的列表-它只是顶级节点的列表。树节点可以包含子节点列表,这使得它具有层次结构。因此,要获得您在问题中定义的树结构,您需要执行以下操作:

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");
}
您也可以这样做:

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
    对象(
    节点
    )的列表。此列表不是树中所有节点的列表,只是控件本身的直接子节点的列表
  • 必须将父节点下存在的所有子节点添加到父节点的
    TreeNode
    对象列表中
  • 每个
    TreeNode
    对象都包含其子对象的
    TreeNode
    对象列表
  • TreeNode
    添加到另一个节点或
    TreeView
    控件本身时,将返回对新
    TreeNode
    对象的引用
  • TreeNode的索引是它相对于其所在列表的索引,而不是相对于整个层次结构的索引
  • TreeNode
    对象具有多个属性,有助于导航树
    PrevNode
    NextNode
    获取上一个或下一个同级树节点(如果存在)。和
    Parent
    获取当前节点的父节点
    TreeNode

  • 您遇到的问题是treeView1控件的
    节点
    集合不是树中所有节点的列表-它只是顶级节点的列表。树节点可以包含子节点列表,这使得它具有层次结构。因此,要获得您在问题中定义的树结构,您需要执行以下操作:

    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");
    }
    
    您也可以这样做:

    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
    对象(
    节点
    )的列表。此列表不是树中所有节点的列表,只是控件本身的直接子节点的列表
  • 必须将父节点下存在的所有子节点添加到父节点的
    TreeNode
    对象列表中
  • 每个
    TreeNode
    对象都包含其子对象的
    TreeNode
    对象列表
  • TreeNode
    添加到另一个节点或
    TreeView
    控件本身时,将返回对新
    TreeNode
    对象的引用
  • TreeNode的索引是它相对于其所在列表的索引,而不是相对于整个层次结构的索引
  • TreeNode
    对象具有多个属性,有助于导航树
    PrevNode
    NextNode
    获取上一个或下一个同级树节点(如果存在)。和
    Parent
    获取当前节点的父节点
    TreeNode