C# Winfrom 写的一个Tree的递归以及调用

来源:互联网 发布:淘宝水印在哪里设置 编辑:程序博客网 时间:2024/06/05 01:01


1递归实现联动效果,

 #region   选中的联动效果        #region 设置的父节点checkbox选中状态        private void setNodeTrue(Node selNode)        {            Node node = selNode.Parent;            if (node != null)            {                node.CheckState = CheckState.Checked;                setNodeTrue(node);            }        }        #endregion        #region 将树的checkbox选中        private void setNodeStateTrue(Node selNode)        {            if (selNode.CheckBoxVisible)            {                selNode.CheckState = CheckState.Checked;                foreach (Node node in selNode.Nodes)                {                    setNodeStateTrue(node);                }            }        }        #endregion        // 将树的checkbox取消选中        private void setNodeStateFalse(Node selNode)        {            if (selNode.CheckBoxVisible)            {                selNode.CheckState = CheckState.Unchecked;                foreach (Node node in selNode.Nodes)                {                    setNodeStateFalse(node);                }            }        }        // 将树的checkbox取消选中        private void setNodeFalse(Node selNode)        {            Node nextNode = selNode.NextNode;            Node previousNode = selNode.PrevNode;            Node praNode = selNode.Parent;            if (praNode != null)            {                while (nextNode != null)                {                    if (nextNode.Checked)                    {                        return;                    }                    nextNode = nextNode.NextNode;                }                while (previousNode != null)                {                    if (previousNode.Checked)                    {                        return;                    }                    previousNode = previousNode.PrevNode;                }                praNode.CheckState = CheckState.Unchecked;                setNodeFalse(praNode);            }        }                   #endregion 
2.在NodeClick中的调用

Node node = e.Node;            if (node.Checked)            {                setNodeTrue(node);                setNodeStateTrue(node);            }            else            {                setNodeStateFalse(node);                setNodeFalse(node);            }
3 获得选中的值

   List<Node> CheckednodeList = new List<Node>();        private void readAllNode(Node tn)        {            if (tn == null)            {                return;            }            if (tn.Nodes.Count.Equals(0))            {                return ;            }            foreach (Node children in tn.Nodes)            {                //MessageBox.Show(string.Format(tn.Text+"节点有{0}", children.Text));                readAllNode(children);                if (children.CheckState ==CheckState.Checked && children!=tn)                {                    CheckednodeList.Add(children);                }            }        }

  4.获得值已经存在CheckednodeList 里面了,用的时候去遍历下,取出来就好了


原创粉丝点击