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;
                        }
                    }
                }
            }
        }
  • 相关阅读:
    性能测试学习笔记目录
    关于多项式的一些东西
    几道有意思的积性函数题
    关于min_25筛的一些理解
    【清华集训2014】主旋律
    清北冬令营训练计划
    # HNOI2012 ~ HNOI2018 题解
    贪心(qwq)习题题解
    导数与积分总结
    仙人掌 && 圆方树 && 虚树 总结
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/4193120.html
Copyright © 2011-2022 走看看