首先事件选择,选择的是MouseUp事件。为啥?因为凡是跟Check有关的,在选中父节点或者子节点,都会二次触发。然后发生的就是死循环。

Up事件就可以避免二次触发。Down事件呢?那就触发AfterCheck事件了。事件选好了, 直接上代码。

处理思路:选中/取消当前节点,先选中其所有父节点,再选中其子节点

注意平级节点处理:有平级节点选中,取消时需要遍历父节点。

若有一个平级节点处于选中,则父节点为选中。

若所有平级都没有选中的了,则父节点要取消选中

        /// <summary>
/// 处理树节点选中和取消选中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void treeView_MouseUpClick(object sender,MouseEventArgs e)
{
TreeView tree = sender as TreeView;
if (tree == null)
return;
TreeNode node = tree.GetNodeAt(e.X, e.Y);
if (node == null)
return;
SetTreeNodeCheckBoxState(node,true,node.Checked);
SetTreeNodeCheckBoxState(node, false, node.Checked);
} /// <summary>
/// 处理父节点,子节点的选中
/// </summary>
/// <param name="node">需要选中的树</param>
/// <param name="isSetParentState">是否选中父节点</param>
/// <param name="state">选中/不选中</param>
public static void SetTreeNodeCheckBoxState(TreeNode node, bool isSetParentState, bool state)
{
if (node == null)
return;
node.Checked = state;
if (isSetParentState && node.Parent != null && node.Checked==true)
{
SetTreeNodeCheckBoxState(node.Parent, isSetParentState, state);
}
else if (isSetParentState && node.Parent != null && node.Checked == false)
{
//处理取消选中
bool isSelect = false;
foreach(TreeNode n in node.Parent.Nodes)
{
if (n.Checked==true)
isSelect = true;
}
//平级都未有选中的才取消选中
if(isSelect==false)
SetTreeNodeCheckBoxState(node.Parent, isSetParentState, state);
}
else if (!isSetParentState && node.Nodes!=null && node.Nodes.Count > )
{
foreach (TreeNode node2 in node.Nodes)
{
SetTreeNodeCheckBoxState(node2, isSetParentState, state);
}
}
}

TreeView树,全选,反选,平级选操作的更多相关文章

  1. jQuery实现checkbox全选反选及删除等操作

    1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...

  2. jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例

    一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...

  3. html中全选反选

    <!--第一层--> <div class="first"> <div class="first_top"> <img ...

  4. JavaScript、全选反选-课堂笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 关于input全选反选恶心的异常情况

    上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...

  6. jQuery全选/反选checkbox

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. python: jquery实现全选 反选 取消

    引入这个jquery-1.12.4.js jquery实现全选 反选 取消 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...

  8. BootStrapt iCheck表单美化插件使用方法详解(含参数、事件等) 全选 反选

    特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 — 包括 桌面和移动设备 2.支持触摸设备 — iOS.Android.BlackBerry.Windows Phone等系统 4.方便 ...

  9. jquery 全选 全不选 反选

    1.概述 在项目中经常遇到列表中对复选框进行勾选操作,全选...反选.. 2. example <html> <body> <form id="test-for ...

随机推荐

  1. spring mybatis错误问题该怎么解决

    1.org.apache.ibatis.exceptions.PersistenceExc org.apache.ibatis.exceptions.PersistenceException: ### ...

  2. 第一部分day4-三次登录实验、字符编码

    #-----三次登录实验----- memu = { "陕西":{ "西安市":{ "新城区":["大明宫遗址",&qu ...

  3. pycharm与github的使用

    1.clone代码: 输入github的存储库地址,输入本地存储目录,点击clone即可: 2.上传代码: 输入存储库名字,点击share即可:github上就会有你分享的代码啦

  4. Navicat Premium 12 永久使用办法

    1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...

  5. 201871010132-张潇潇-《面向对象程序设计(java)》第四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  6. Hyperparameters

    参数是机器学习算法的关键.它们通常由过去的训练数据中总结得出.在经典的机器学习文献中,我们可以将模型看作假设,将参数视为对特定数据集的量身打造的假设. 模型是否具有固定或可变数量的参数决定了它是否可以 ...

  7. 基于zookeeper-3.5.5安装hadoop-3.1.2

    目录 目录 1 1. 前言 3 2. 缩略语 3 3. 安装步骤 4 4. 下载安装包 4 5. 机器规划 4 6. 设置批量操作参数 5 7. 环境准备 5 7.1. 修改最大可打开文件数 5 7. ...

  8. md5-js加密

    JS-MD5加密/html页面使用 大家都知道,传输明文信息很不安全,尤其像密码.卡号等这些敏感私密的信息,更不能暴露出去.在这里给大家介绍一种在前端JS中的MD5加密算法(因为要匹配的后台数据是MD ...

  9. 专题-主存储器与Cache的地址映射方式

    2019/05/02 10:23 首先,我们注意到地址映射有三种:分别是直接地址映射.全相联映射.组相联映射. 首先我们搞清楚主存地址还有Cache地址的关系,还有组内地址的关系,常见我们的块内地址, ...

  10. css规范思维导图(仅限于自己)