//在所有子结点.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;//此句在调试时报错:                                             //确保不会出现无限循环或者无限递归
                }
         }
   }

解决方案 »

  1.   

    foreach (TreeNode node in this.treeView1.SelectedNode.Parent.Nodes) //这里的问题
    改为取当前节点:foreach (TreeNode node in e.Note.Parent.Nodes)
    因为下面代码执行后又会引发AfterCheck事件,
    treeView1.SelectedNode.Parent.Checked= false;
    如果使用SelectedNode这样就会死循环了,用e.Note就正好
      

  2.   

    楼上的说的对。
    我做过,不过只能在false下可以。
    尝试了几次true的情况,都是死循环。
    大家讨论一下有什么解决方法