zoukankan      html  css  js  c++  java
  • Winform TreeView控件技巧

          在开发的时候经常使用treeview控件来显示组织结构啊,目录结构啊,通常会结合属性checkedboxs,来做选中,取消的操作下面是一个选中,取消的小例子,选中节点的时候,如果节点存在子节点,可以选中全部的子节点;如果取消一个节点的选中状态,当前节点同时又存在父节点的话,就取消父节点的选中状态。

    private void trvPost_AfterCheck(object sender, TreeViewEventArgs e)
            {
                //通过鼠标或者键盘触发事件,防止修改节点的Checked状态时候再次进入
                if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
                {
                   SetChildNodeCheckedState(e.Node, e.Node.Checked);
                   SetParentNodeCheckedState(e.Node, e.Node.Checked);
                }
            }
    
     //设置子节点状态
            public void SetChildNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)
            {
                if (currNode.Nodes == null) return; //没有子节点返回
                foreach (TreeNode tmpNode in currNode.Nodes)
                {
                    tmpNode.Checked = isCheckedOrNot;
                    SetChildNodeCheckedState(tmpNode, isCheckedOrNot);
                }
            }
    
            //设置父节点状态
            public void SetParentNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)
            {
                if (currNode.Parent == null) return; //没有父节点返回
                if (isCheckedOrNot) //如果当前节点被选中,则设置所有父节点都被选中
                {
                    currNode.Parent.Checked = isCheckedOrNot;
                    SetParentNodeCheckedState(currNode.Parent, isCheckedOrNot);
                }
                else //如果当前节点没有被选中,则当其父节点的子节点有一个被选中时,父节点被选中,否则父节点不被选中
                {
                    bool checkedFlag = false;
                    foreach (TreeNode tmpNode in currNode.Parent.Nodes)
                    {
                        if (tmpNode.Checked)
                        {
                            checkedFlag = true;
                            break;
                        }
                    }
                    currNode.Parent.Checked = checkedFlag;
                    SetParentNodeCheckedState(currNode.Parent, checkedFlag);
                }
            }
  • 相关阅读:
    LeetCode第[84]题(Java):Largest Rectangle in Histogram(最大的矩形柱状图)
    LeetCode第[79]题(Java):Word Search(矩阵单词搜索)
    LeetCode第[78]题(Java):Subsets(求子集)扩展——第[90]题:Subsets 2
    关于SpringMVC中两种映射器不能共存的解决
    LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)
    php分页的实现
    PHP编码规范
    PHP常用函数
    PHP配置文件详解php.ini
    面向对象编程——parent—this
  • 原文地址:https://www.cnblogs.com/xiaoqi742709106/p/4213561.html
Copyright © 2011-2022 走看看