检查节点是否存在并添加子节点
本文关键字:添加 子节点 存在 节点 是否 检查 | 更新日期: 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方法