检查节点是否存在并添加子节点

本文关键字:添加 子节点 存在 节点 是否 检查 | 更新日期: 2023-09-27 18:23:42

由于不可能使节点不可见,我决定在需要它们之前不创建它们。

我的代码:

if(comboBox3.Text == "Books")
{
   if (treeView1.Nodes.ContainsKey("Books") == true)
   {
      treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
   }
   else if (treeView1.Nodes.ContainsKey("Books") == false)
   {
      treeView1.Nodes.Add("Books");
      treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
   }
}

ComboBox中有几个类别。这是负责"书籍"的代码。在TextBox中,我正在编写标题,点击一个按钮后,这段代码就开始工作了。首先,它检查根节点"Books"是否存在。如果是,它只添加文本框中的任何内容作为子节点。但如果没有,它会创建名为"Books"的根节点,然后添加一个子节点。我在这行遇到错误:

treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);

错误:

NullReferenceException was unhandled

此外,是否可以更改索引编号,即。我想创建5个类别,但我也想有特定的顺序,比如说1.房子2.汽车3.书籍4.电话5.自行车,我想先添加书籍,然后添加汽车,然后添加自行车。有什么可以更改索引号的吗?

检查节点是否存在并添加子节点

您在哪个部分得到错误?在if中还是在else中?

此外,您的代码可能要简单得多:

if(comboBox3.Text == "Books")
{
    if (!treeView1.Nodes.ContainsKey("Books"))
        treeView1.Nodes.Add("Books");
    treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}

编辑:

添加TreeNode时,必须提供节点的名称。只有这样,才能通过名称访问集合来获得集合的节点。如果不设置名称,仍然可以使用索引访问集合。但在这种情况下,您使用的是字符串键,因此您还必须为Books树节点提供一个名称:

if(comboBox3.Text == "Books")
{
   if (!treeView1.Nodes.ContainsKey("Books"))
   {
       TreeNode booksNode = new TreeNode("Books");
       booksNode.Name = "Books";
       treeView1.Nodes.Add(booksNode);
   }
   treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}

再短一点(但可能可读性较差),这将是:

if(comboBox3.Text == "Books")
{
   if (!treeView1.Nodes.ContainsKey("Books"))
       treeView1.Nodes.Add(new TreeNode("Books") { Name = "Books" });
   treeView1.Nodes["Books"].Nodes.Add(textBox1.Text);
}

ContainsKey没有搜索每个节点的子节点。它只搜索您提供的根节点。显然,为了检查深度是否包含,您必须使用treeview.Nodes.Find(Key, true)。有人知道另一种解决方案吗?

这不是必需的

   else if (treeView1.Nodes.ContainsKey("Books") == false)

您可以简单地用else替换。

对于基于索引的添加,我认为您可以查看以下链接TreeNodeCollection.Inter方法