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

时间:2013-07-18 12:08:25

标签: c# visual-studio-2010

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

我的代码:

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.House 2.Cars 3.Books 4.Phones 5.Bikes和我想添加第一本书,然后是汽车,然后是自行车。有什么可以改变索引号吗?

3 个答案:

答案 0 :(得分:3)

你在哪部分得到错误?在if或in else?

此外,您的代码可能更简单:

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

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

修改

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

这不是必需的

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

您只需按else替换。

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