树节点,前面有一个复选框
我想选中父节点的时候,所有的子节点全部选中
就用了那个,当前选中事件,当我选择一个为true或为false
的时候,循环所有子节点
可是我每次循环选择一个的时候,该事件都会被激活
这样是可以做出来,可是觉得有点麻烦
、
不知道还有没有谁有更简单的方法谢谢赐教
我想选中父节点的时候,所有的子节点全部选中
就用了那个,当前选中事件,当我选择一个为true或为false
的时候,循环所有子节点
可是我每次循环选择一个的时候,该事件都会被激活
这样是可以做出来,可是觉得有点麻烦
、
不知道还有没有谁有更简单的方法谢谢赐教
就好像是一个递归调用的过程了
如果要实现你说的功能就只能AfterCheck事件.所以没法了,自己多加点判断和控制就好了
{
foreach (TreeNode tn1 in e.Node.Nodes)
{
tn1.Checked = e.Node.Checked;
}
}
{
if not e.Node.Nodes is null(加个判断) foreach (TreeNode tn1 in e.Node.Nodes)
{
tn1.Checked = e.Node.Checked;
}
}
1.当取消选中某节点(如:A1)时,要同时取消其父节点(如:A)
2.挨个儿选中某节点(如:B)下所有子节点(如:B1、B2...)时,该节点本身(即:B)要变成选中要完美解决这些问题,上述代码要如何完善呢?
{
bool checkAll = true; if (e.Node.Nodes != null)
{
foreach (TreeNode tn in e.Node.Nodes)
{
tn.Checked = e.Node.Checked;
}
} if (e.Node.Parent != null)
{
if (!e.Node.Checked)
{
e.Node.Parent.Checked = false;
}
else
{
foreach (TreeNode tn in e.Node.Parent.Nodes)
{
if (!tn.Checked)
{
checkAll = false;
break;
}
} e.Node.Parent.Checked = checkAll;
}
}
}说明:AfterCheck 事件,在任何时刻节点的Check状态改变都会触发,所以以上代码发生父子节点交叉影响,所以死循环寻求正解.........................