zoukankan      html  css  js  c++  java
  • 在TreeView中使用CheckBox(c#)

    树结构中的节点共有两层(父节点是分类名称子节点是属于该类的项的名称)都是从数据库中读出而且是在读出的过程中将具体的数据项名称进行分类的。要想实现:treeview的AfterCheck事件中的:

        1.父节点勾选则子节点全部勾选

        2.父节点不勾选则子节点全部不勾选

        3.子节点全部不勾选则父节点不够选而且父节点的文本呈黑色

        4.子节点部分勾选则父节点不勾选而且文本呈灰色

        5.子节点全部勾选则父节点被勾选而且文本呈黑色

    private bool nextCheck(TreeNode n)//判断同级的节点是否全选

      {

       if(n.Checked==false)

        return false;

       if(n.NextNode == null)

        return true;

       return this.nextCheck(n.NextNode);

      }

      private bool nextNotCheck(TreeNode n)//判断同级的节点是否全不选

      {

       if(n.Checked==true)

        return false;

       if(n.NextNode == null)

        return true;

       return this.nextNotCheck(n.NextNode);

      }

      bool bCheck=false;

      private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)

      {

       if(bCheck)

        return;

       

       ///////////////////////////要求父节点被勾选则子节点全部被勾选;父节点不被勾选则子节点全部不被勾选////////////////////////

       if(e.Node.Parent==null&&e.Node.Nodes.Count!=0)//父节点

       { 

        if(e.Node.Checked==true)

        {

         for(int i=0;i<e.Node.Nodes.Count;i++)

         {

          if(e.Node.Nodes[i].Checked==false)

          {

           bCheck=true;

           e.Node.Nodes[i].Checked=true;//父节点选中则子节点全部选中

          }

         }

         e.Node.ForeColor=Color.Black;

         bCheck=false;

        }

        if(e.Node.Checked==false)

        {

         for(int i=0;i<e.Node.Nodes.Count;i++)

         {

          

          bCheck=true;

          e.Node.Nodes[i].Checked=false;//父节点不选中则子节点全部不选中

         

         }

         e.Node.ForeColor=Color.Black;

         bCheck=false;

        }

       

        return; 

        

       }

       ///要求子节点全部不勾选则父节点不被勾选且文本呈黑色;子节点部分被勾选则父节点不被勾选文本呈蓝色;子节点全部勾选则父节点被勾选且文本呈黑色///////

       if(e.Node.Parent!=null&&e.Node.Nodes.Count==0)//子节点

       {

        if(nextCheck(e.Node.Parent.FirstNode)==true)//全部勾选

        {

         bCheck=true;

         e.Node.Parent.Checked =true;

         e.Node.Parent.ForeColor =Color.Black ;

        }

        else if(nextNotCheck(e.Node.Parent.FirstNode)==true)//全部不勾选

        {

         bCheck=true;

         e.Node.Parent.Checked =false;

         e.Node.Parent.ForeColor =Color.Black ;

        }

        else

        {

         bCheck=true;

         e.Node.Parent.Checked =false;

         e.Node.Parent.ForeColor =Color.Gray;

        }

         bCheck=false;

        return;

       }

      }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

             以下是递归的多极节点的实现

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

     private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)

      {

       if( e.Action != TreeViewAction.Unknown )

       {

        //Event call by mouse or key-press

        SetNodeCheckStatus( e.Node, e.Node.Checked );

       }

      }

      private void SetNodeCheckStatus( TreeNode tn, bool Checked )

      {

       if( tn == null ) return;

       // Check children nodes

       foreach (TreeNode tnChild in tn.Nodes)

       {

        tnChild.Checked = Checked;

        SetNodeCheckStatus( tnChild, Checked );

       }

       // Set parent check status

       TreeNode tnParent = tn;

       int nNodeCount = 0;

       while( tnParent.Parent != null )

       {

        tnParent = (TreeNode)(tnParent.Parent);

        nNodeCount = 0;

        foreach( TreeNode tnTemp in tnParent.Nodes )

         if( tnTemp.Checked == Checked )

          nNodeCount++;

        if( nNodeCount == tnParent.Nodes.Count )

         tnParent.Checked = Checked;

        else

         tnParent.Checked = false;

       }

      }

  • 相关阅读:
    Docker 安装Mysql
    Windows Store APP- C# to get IP Address
    使用eclipse构建maven和发布maven的项目
    eclipse中安装maven的插件
    window下安装和部署maven
    oracle12c的(window版本)安装详解
    Linux配置MySQL
    Linux配置Tomcat
    Linux配置JDK环境变量
    maven创建web项目的报错解决方案
  • 原文地址:https://www.cnblogs.com/yuanermen/p/1167715.html
Copyright © 2011-2022 走看看