winfrom 树勾选

树勾选

 

        /// <summary>
        /// 树勾选
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvCourse_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action ==TreeViewAction.ByMouse)
            {
                if (e.Node.Checked)
                {
                    SetChildNode(e.Node, true);
                    if (null!= e.Node.Parent)
                    {
                        SetParentNode(e.Node, true);
                    }
                }
                else
                {
                    //取消节点选中状态之后,取消所有父节点的选中状态
                    SetChildNode(e.Node, false);
                    //如果节点存在父节点,取消父节点的选中状态
                    if (e.Node.Parent != null)
                    {
                        SetParentNode(e.Node, false);
                    }
                }
            }
        }
        /// <summary>
        /// 设置父节点
        /// </summary>
        /// <param name="node">当前节点</param>
        /// <param name="state">状态</param>
        private void SetParentNode(TreeNode node, bool state)
        {
            TreeNode pNode = node.Parent;
            if (null != pNode)
            {
                pNode.Checked = state;
                bool flag = false;
                foreach (TreeNode currNode in pNode.Nodes)
                {
                    if (!currNode.Checked)  //控制父节点全选,父节点选中去掉!
                    {
                        flag = false;
                        pNode.Checked = flag;
                        break;
                    }
                    //SetParentNode(item, state);
                }
                SetParentNode(pNode, flag);
                
            }
        }
        /// <summary>
        /// 设置子节点
        /// </summary>
        /// <param name="node">当前节点</param>
        /// <param name="state">状态</param>
        private void SetChildNode(TreeNode node, bool state)
        {
            TreeNodeCollection tncNodes = node.Nodes;
            if (tncNodes.Count>0)
            {
                foreach (TreeNode currNode in tncNodes)
                {
                    currNode.Checked = state;
                    SetChildNode(currNode, state);
                }
            }
        }
View Code

 

posted @ 2018-11-29 16:37  bxzjzg  阅读(137)  评论(0编辑  收藏  举报