本帖最后由 dongxiao0517 于 2011-08-22 16:38:52 编辑

解决方案 »

  1.   

    (0x2000)
    (1) 
    (0)
    (6) 
    (0xc0)
    (0xe0
     (0x20)
      (6)
       (6)
       COMM_DEBUG_PRINT if(CCU_TRUE == g_ulCommDebug)CCU_Printf
      

  2.   

    是这样了:
    1.点父节点,子节点全选:
    if(TreeNode1.Selected)
    {
       foreach(TreeNode tr in TreeNode1.Nodes)
       {
         tr.Selected=true;
       }
    }
    2.子节点选部分,父节点显示方块(需要设置为三态显示):
    if(TreeNode1.Selected)
    {
      TreeNode1.Parent.Selected=True;
    }
    全部是手写,可能有错误,领会精神,呵呵(其中 TreeNode1 是当前你所选择的节点)
      

  3.   

      private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                if (e.Action == TreeViewAction.ByMouse)
                {
                    if (e.Node.Checked)
                    {
                        //取消节点选中状态之后,取消所有父节点的选中状态
                        setChildNodeCheckedState(e.Node, true);
                    }
                    else
                    {
                        //取消节点选中状态之后,取消所有父节点的选中状态
                        setChildNodeCheckedState(e.Node, false);
                        //如果节点存在父节点,取消父节点的选中状态
                        if (e.Node.Parent != null)
                        {
                            setParentNodeCheckedState(e.Node, false);
                        }
                    }
                }
            }
            //取消节点选中状态之后,取消所有父节点的选中状态
            private void setParentNodeCheckedState(TreeNode currNode, bool state)
            {
                TreeNode parentNode = currNode.Parent;            parentNode.Checked = state;
                if (currNode.Parent.Parent != null)
                {
                    setParentNodeCheckedState(currNode.Parent, state);
                }
            }
            //选中节点之后,选中节点的所有子节点
            private void setChildNodeCheckedState(TreeNode currNode, bool state)
            {
                TreeNodeCollection nodes = currNode.Nodes;
                if (nodes.Count > 0)
                    foreach (TreeNode tn in nodes)
                    {
                        tn.Checked = state;
                        setChildNodeCheckedState(tn, state);
                    }
            }
      

  4.   

    5楼的setParentNodeCheckedState方法即可实现你的要求啊,lz仔细看啊。
      

  5.   

      /// <summary>
            /// 设置所有父节点的选中状态
            /// </summary>
            /// <param name="currNode"></param>
            /// <param name="state"></param>
            private void setParentNodeCheckedState(TreeNode currNode, bool state)
            {
                TreeNode parentNode = currNode.Parent;            parentNode.Checked = state;
                if (currNode.Parent.Parent != null)
                {
                    setParentNodeCheckedState(currNode.Parent, state);
                }
            }        /// <summary>
            /// 设置所有子节点的选中状态
            /// </summary>
            /// <param name="currNode"></param>
            /// <param name="state"></param>
            private void setChildNodeCheckedState(TreeNode currNode, bool state)
            {
                TreeNodeCollection nodes = currNode.Nodes;
                if (nodes.Count > 0)
                    foreach (TreeNode tn in nodes)
                    {
                        tn.Checked = state;
                        setChildNodeCheckedState(tn, state);
                    }
            }
          /// <summary>
            /// 控制正选,反选,以及选中子节点的时候选中父节点,取消父节点则取消所有子节点
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void tvModules_AfterCheck(object sender, TreeViewEventArgs e)
            {
                if (e.Action == TreeViewAction.ByMouse)
                {
                    if (e.Node.Checked)
                    {
                        //节点选中后,选中所有子节点
                        setChildNodeCheckedState(e.Node, true);                    //节点选中之后,选中所有父节点
                        if (e.Node.Parent != null)
                        {
                            setParentNodeCheckedState(e.Node, true);
                        }
                    }
                    else
                    {
                        //取消节点选中后,取消所有子节点的选中状态
                        setChildNodeCheckedState(e.Node, false);
                    }
                }
            }
      

  6.   

    TreeView 加载的时候判断父节点是否为选中状态,如果没选中就判断其子节点是否为全部选中,,,
    如果没有全部选中就改变此节点的颜色
      

  7.   

    if()//子节点没全部选中
    {
    TreeNode f = new TreeNode();
     f.Parent.BackColor = Color.Red;
    }
      

  8.   

    treeView1.CheckBoxes = true;
    treeView1.AfterCheck += this.treeView1_AfterCheck;
    treeView1.ExpandAll();
     private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                this.CheckSubNodes(e.Node);           
            }
     private void CheckSubNodes(TreeNode checkRoot)
            {
                //遍历所有直接子节点,并调整其Check状态为父节点的状态
                foreach (TreeNode tn in checkRoot.Nodes)
                {
                    //注意这里本身并没有直接递归调用CheckSubNodes,但是由于这个操作导致了其子节点的状态变化,产生了AfterCheck事件。
                    tn.Checked = checkRoot.Checked;
                }
            }
      

  9.   

    有个类似的帖子,楼主参考:http://topic.csdn.net/u/20110822/16/6573eb5a-6fad-4efd-81e2-22f58f7b22bd.html