C#中TreeView实现适合两级节点的选中节点方法

作者:我心依旧 时间:2022-10-02 19:12:42 

本文实例讲述了C#中TreeView实现适合两级节点的选中节点方法。分享给大家供大家参考。具体如下:


class TreeViewChecked
{
 bool isfirst = true;
 public TreeViewChecked(TreeView treeView)
 {
  treeView.AfterCheck += new TreeViewEventHandler(treeView_AfterCheck);
  treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
 }
 /// <summary>
 /// 点击文字,选中checkbox
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void treeView_AfterSelect(object sender, TreeViewEventArgs e)
 {
  if (e.Node.Checked)
   e.Node.Checked = false;
  else
   e.Node.Checked = true;
  if (isfirst)
  {
   isfirst = false;
   e.Node.TreeView.Nodes[0].Checked = false;
  }
 }
 /// <summary>
 /// 选中子节点,勾选父节点,选中父节点,勾选子节点
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void treeView_AfterCheck(object sender, TreeViewEventArgs e)
 {
  CheckTreeNode(e.Node);
 }
 /// <summary>
 /// 选中子节点,勾选父节点,选中父节点,勾选子节点
 /// </summary>
 /// <param name="node"></param>
 private void CheckTreeNode(TreeNode node)
 {
  node.TreeView.AfterCheck -= new TreeViewEventHandler(treeView_AfterCheck);
  //如果不等于null,说明选择的是子节点
  if (node.Parent != null)
  {
   TreeNode parent = node.Parent as TreeNode;
   //如果该节点是选中的
   if (node.Checked)
   {
    //判断其父节点是否被选中,如果没有被选中则选中它
    if (parent.Checked == false)
    {
     parent.Checked = true;
    }
   }
   else
   {
    bool ischecked = false;
    foreach (TreeNode child in parent.Nodes)
    {
     if (child.Checked)
     {
      ischecked = true;
      break;
     }
    }
    if (ischecked)
     parent.Checked = true;
    else
     parent.Checked = false;
   }
  }//如果等于null,说明选择的是根节点
  else
  {
   foreach (TreeNode child in node.Nodes)
   {
    child.Checked = node.Checked;
   }
  }
  node.TreeView.AfterCheck += new TreeViewEventHandler(treeView_AfterCheck);
 }
}

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,TreeView
0
投稿

猜你喜欢

  • Java实现扑克牌程序

    2023-11-11 12:09:52
  • Android PopupWindow增加半透明蒙层

    2021-12-30 04:12:09
  • C#实现Check Password和锁定输错密码锁定账户功能

    2023-01-20 03:04:33
  • C#中Winform 实现Ajax效果自定义按钮

    2022-05-14 08:22:51
  • Java动态代 理分析及简单实例

    2023-11-24 21:14:56
  • C#使用Twain协议实现扫描仪连续扫描功能

    2023-02-15 18:14:38
  • 基于Spring的注解@Qualifier小结

    2022-12-20 23:17:50
  • Java线程状态变换过程代码解析

    2023-08-06 18:05:29
  • 使用ehcache三步搞定springboot缓存的方法示例

    2021-06-25 04:44:12
  • springboot自动扫描添加的BeanDefinition源码实例详解

    2023-11-24 15:15:22
  • springboot注册bean的三种方法

    2023-11-22 21:57:12
  • java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例

    2021-06-21 12:29:50
  • Android Studio实现简单音乐播放功能的示例代码

    2021-09-14 19:51:45
  • 基于Java实现双向链表

    2022-11-17 11:39:16
  • Java 获取当前时间及实现时间倒计时功能【推荐】

    2022-08-21 16:08:27
  • Struts2中Action三种接收参数形式与简单的表单验证功能

    2022-11-26 08:55:20
  • java 使用DecimalFormat进行数字的格式化实例详解

    2022-04-28 10:55:25
  • 基于OpenGL实现多段Bezier曲线拼接

    2022-03-07 03:47:31
  • java虚拟机学习笔记进阶篇

    2022-01-07 04:53:06
  • java开源好用的简繁转换类库推荐

    2022-11-09 06:31:32
  • asp之家 软件编程 m.aspxhome.com