想实现的功能:
1.当点选/取消父节点时,子节点全部选中/取消
2.当点选任何一个子节点时,父节点也选中,当子节点全为空时,父节点也为空第1个功能已实现,第2个还未实现,请高手指点代码如下:private void treeView2_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                CheckAllChildNodes(e.Node, e.Node.Checked);
                
                //选中父节点
                bool bol = true;
                if (e.Node.Parent != null)
                {
                    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
                    {
                        if (!e.Node.Parent.Nodes[i].Checked)
                            bol = false;
                    }
                    e.Node.Parent.Checked = bol;
                   
                }
        }//选中子节点
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
        {
            foreach (TreeNode node in treeNode.Nodes)
            {
                node.Checked = nodeChecked;
                if (node.Nodes.Count > 0)
                {
                    this.CheckAllChildNodes(node, nodeChecked);
                }
            }
           
        }

解决方案 »

  1.   

    //选中父节点
    bool bol = false;
    if (e.Node.Parent != null)
    {
    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
    {
    if (e.Node.Parent.Nodes[i].Checked)
    bol = true;
    }
    e.Node.Parent.Checked = bol;}
      

  2.   

    private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
            {
    if(e.Node.Checked)//子节点选中,父节点自动选中
    {
    e.Node.Parent.Checked = true;
    }
    else//子节点不选,则检索同一父亲下的所有兄弟,如果全不选,则父节点为空
    {
    bool allNotChecked = true;
    foreach(TreeNode node in e.Node.Parent.Nodes)
    {
    if(node.Checked)
    {
    allNotChecked = false;
    break;
    }
    }
    if(allNotChecked) e.Node.Parent.Checked = false;
    }

            }
      

  3.   

    http://community.csdn.net/Expert/topic/5146/5146522.xml?temp=.2965814
      

  4.   

    //父节点也要第归一把,上面的不行。
    //选中父节点
    public void CheckAllParentNodes(TreeNode treeNode, bool nodeChecked)
    {
    bool bol = false;
    if (e.Node.Parent != null)
    {
    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
    {
    if (e.Node.Parent.Nodes[i].Checked)
    bol = true;
    }
    e.Node.Parent.Checked = bol;
    CheckAllParentNodes(e.Node.Parent,bol);
    }
    }