//在所有子结点.checked=true状态下,若令一子结点.checked=false,则父结点checkbox=false.(初始状态父结点和子结点checked全为true)
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Checked==false)
{
bool flag = false;
//检测不是全选状态
foreach (TreeNode node in this.treeView1.SelectedNode.Parent.Nodes)
{
if (node.Checked == false)
{
flag = true;
}
} if (flag == true)
{
treeView1.SelectedNode.Parent.BackColor = System.Drawing.Color.Gray;
//treeView1.SelectedNode.Parent.Checked= false;//此句在调试时报错: //确保不会出现无限循环或者无限递归
}
}
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Checked==false)
{
bool flag = false;
//检测不是全选状态
foreach (TreeNode node in this.treeView1.SelectedNode.Parent.Nodes)
{
if (node.Checked == false)
{
flag = true;
}
} if (flag == true)
{
treeView1.SelectedNode.Parent.BackColor = System.Drawing.Color.Gray;
//treeView1.SelectedNode.Parent.Checked= false;//此句在调试时报错: //确保不会出现无限循环或者无限递归
}
}
}
改为取当前节点:foreach (TreeNode node in e.Note.Parent.Nodes)
因为下面代码执行后又会引发AfterCheck事件,
treeView1.SelectedNode.Parent.Checked= false;
如果使用SelectedNode这样就会死循环了,用e.Note就正好
我做过,不过只能在false下可以。
尝试了几次true的情况,都是死循环。
大家讨论一下有什么解决方法