private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode node = e.Node;
            if (node.Nodes.Count == 0)
                return;
            if (node.Checked)
                node.Nodes.OfType<TreeNode>().ToList().ForEach(x => x.Checked = true);
            else
                node.Nodes.OfType<TreeNode>().ToList().ForEach(x => x.Checked = false);
        }
父节点勾选,子节点自动全部勾选,父节点取消勾选,子节点自动全部取消勾选
上面的代码,为什么没有产生效果,哪里出错了?

解决方案 »

  1.   

    需要递归遍历所有级的节点。写在Click事件中。
      

  2.   

    1.确定treeView1的CheckBoxes属性为True2.处理AfterCheck事件,处理AfterSelect事件无效(暂时还没弄明白为什么)
      

  3.   

    具体实现可以参考下面这个文章:
    http://www.cnblogs.com/allen0118/archive/2012/11/28/2793037.html
      

  4.   

    你是否调试了?能够走到 node.Nodes.OfType<TreeNode>().ToList().... 的语句?
      

  5.   

    调试后发现AfterSelect事件获取node.Checked的值的时候,
    第一次:初始化时,所有节点均未选中,node.Checked为False,所以代码执行的结果为全部子节点的选中状态为False.第二次:选中父节点后点击该节点,node.Checked为True,代码结果为全部子节点选中.所以不要处理AfterSelect事件 因为对应启用的CheckBoxes有AfterChekc和BeforeCheck事件可供处理