3

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

我的代码:

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,我想先添加 Books,然后是 Cars,然后是 Bikes。有什么可以更改索引号的吗?

4

3 回答 3

3

你在哪一部分得到错误?在 if 中还是在 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);
}
于 2013-07-18T12:16:50.480 回答
2

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

于 2013-10-21T13:42:30.483 回答
0

这不是必需的

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

您可以简单地替换为else.

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

于 2013-07-18T12:19:14.147 回答