zoukankan      html  css  js  c++  java
  • winform TreeView 节点选择

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string tag = "True";
            StringBuilder nodesTag;
            /// <summary>
            /// 全选
            /// </summary>
            /// <param name="treeNode"></param>
            /// <param name="nodeChecked"></param>
            private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
            {
                foreach (TreeNode node in treeNode.Nodes)
                {
                    node.Checked = nodeChecked;
                    node.Tag = tag;////记得在这里为选中的项目设置tag属性
                    if (node.Nodes.Count > 0)
                    {
                        this.CheckAllChildNodes(node, nodeChecked);
                    }
                }
            }
    
            private void TraversNodes(TreeNode parent)
            {
                TreeNode node = parent;
                if (node != null)
                {
                    if (node.Tag != null && node.Tag.ToString() == tag)
                        nodesTag.AppendFormat("node:{0} has checked
    ", node.Text);
    
                    if (node.FirstNode != null)////如果node节点还有子节点则进入遍历
                    {
                        TraversNodes(node.FirstNode);
                    }
                    if (node.NextNode != null)////如果node节点后面有同级节点则进入遍历
                    {
                        TraversNodes(node.NextNode);
                    }
                }
            }
            /// <summary>
            /// 已选中或取消选中框发生事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                if (e.Action != TreeViewAction.Unknown)
                {
                    TreeNode node = e.Node;
                    if (node.Tag == null)
                        node.Tag = tag;//附加结点信息
                    else
                        node.Tag = null;
    
                    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;
    
                        ////记得如果父节点被选中或取消,记得设置它的tag
                        if (bol)
                        {
                            e.Node.Parent.Tag = tag;
                        }
                        else
                        {
                            e.Node.Parent.Tag = null;
                        }
                    }
                }
            }
        }
  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/4193120.html
Copyright © 2011-2022 走看看