C#winform使用TreeView,每次添加节点前对节点进行查重--有重复的节点就跳框显示(使用messagebox.show()),但总是出错误,会出现明明没有该节点却报有重复导致不能添加节点,但是这个问题不是每次都出现,偶尔会出现,试验了一下,就是查重方法的递归调用出的问题,把递归调用注释掉就不出错了,但是没递归调用又没法查重,请给解决下,要求能正常查重并添加节点。
下面是查重方法的代码
private void Check(TreeNodeCollection treeNodes) //检查Tree View控件中是否已经存在指定用户的节点
{
tmpBool = false;
foreach (TreeNode treeNode in treeNodes)
{
//unit,user,lowest是由form输入的值,一次只能输入三个中的一个
if (treeNode.Text.Equals(unit)|| treeNode.Text.Equals(user)|| treeNode.Text.Equals(lowest))
{
treeNode.BackColor = Color.Red; //将节点的背景颜色设为红色
treeNode.Parent.Expand(); //展开父节点
repeatable = true; //设置repeatable为true,表示在三级节点中找到了该用户
}
if (treeNode.Nodes.Count > 0)
{
Check(treeNode.Nodes); //递归调用CheckUser,查找子节点中是否存在该用户
}
}
}
添加节点的代码:
添加最上级节点
private void AddArea_Click(object sender, EventArgs e)
{
//创建AddUser窗体的实例
AddUnit form = new AddUnit(this);
//显示窗体,等待用户输入
// if (form.ShowDialog()== DialogResult.OK)
form.ShowDialog();
if (!string.IsNullOrEmpty(unit))
{
//检查Tree View控件中是否已经存在指定用户的节点
Check(this.treeView1.Nodes);
if (repeatable)
{
//如果用户已经存在,弹出确认对话框
MessageBox.Show("[" + unit + "]已经存在");
}
else
{ //如果用户不存在,创建新的节点
TreeNode node = CreateRootNode();
//TreeNode selectNode = this.treeView1.SelectedNode;
//selectNode.Nodes.Add(node); //adduser
this.treeView1.Nodes[0].Nodes.Add(node);
SaveToXml(); //重新从XML文件中加载数据并更新Tree View控件
LoadFormXml();
}
}
// }
repeatable = false; //重置repeatable
}
添加二级节点
private void AddUser_Click(object sender, EventArgs e)
{
//创建AddUser窗体的实例
AddUser form = new AddUser(this);
//显示窗体,等待用户输入
if (form.ShowDialog() == DialogResult.OK)
{
if (!string.IsNullOrEmpty(user))
{
//检查Tree View控件中是否已经存在指定用户的节点
Check(this.treeView1.Nodes);
if (repeatable)
{
//如果用户已经存在,弹出确认对话框
MessageBox.Show("[" + user + "]已经存在");
}
else
{ //如果用户不存在,创建新的节点
TreeNode node = CreateChildNode();
TreeNode selectNode = this.treeView1.SelectedNode;
selectNode.Nodes.Add(node);
SaveToXml(); //重新从XML文件中加载数据并更新Tree View控件
LoadFormXml();
}
}
}
repeatable = false; //重置repeatable
}
添加三级节点
private void AddLowest_Click(object sender, EventArgs e)
{
//创建AddUser窗体的实例
AddLowest form = new AddLowest(this);
//显示窗体,等待用户输入
if (form.ShowDialog() == DialogResult.OK)
{
if (!string.IsNullOrEmpty(lowest))
{
//检查Tree View控件中是否已经存在指定用户的节点
Check(this.treeView1.Nodes);
if (repeatable)
{
//如果用户已经存在,弹出确认对话框
MessageBox.Show("[" + lowest + "]已经存在");
}
else
{ //如果用户不存在,创建新的节点
TreeNode node = CreateLowestNode();
TreeNode selectNode = this.treeView1.SelectedNode;
selectNode.Nodes.Add(node); //adduser
SaveToXml(); //重新从XML文件中加载数据并更新Tree View控件
LoadFormXml();
}
}
}
repeatable = false; //重置repeatable
}