首先事件选择,选择的是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. rhel7学习第四天

    学习<Linux就该这么学>第二周,学习了最重要的几个文件操作命令

  2. django-URL路由系统

    配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个U ...

  3. Matplotlib 绘制定制的直方图

    1.普通风格 代码 import numpy as np import matplotlib.pyplot as plt rng = np.random.RandomState(27) x = rng ...

  4. 02-docker入门-docker常用的一些命令

    在这里,有必要先对ducker在做一次介绍 ducker 是一个容器. 容器内部运行的是一个系统. 系统内部安装好了要调试 / 发布的工程,然后这个系统被打包成了一个镜像. ducker 就是这个镜像 ...

  5. 【java异常】Expected one result (or null) to be returned by selectOne(), but found: 63

    OmQuotaTBBean omQuotaTBBean = mOmQuotaTBMapper.findOmQuotaTB(); 改成 List<OmQuotaTBBean> listOmQ ...

  6. hadoop java.io.EOFException: Unexpected end of input stream

    执行hadoop 报错 java.io.EOFException: Unexpected end of input stream at org.apache.hadoop.io.compress.De ...

  7. Python power函数

    power函数 from math import pow def power(x, y): if y == 0: return 1 tot = 1 for i in range(y): tot *= ...

  8. 说几条JavaScript的基本规范

    1.不要在同一行声明多个变量 2.使用===或!==来比较 3.使用字面量的方式来创建对象.数组,替代new Array这种形式 4.不要使用全局函数 5.switch语句必须要带default分支 ...

  9. PATB1002写出这个数

    参考代码: #include<cstdio> #include<cstring> #include<cstdlib> int main() { char str[1 ...

  10. 开发中常用linux命令

    1.创建目录mkdir 创建目录命令,常用的参数-p,递归创建目录 [root@web01 ~]# mkdir /data [root@web01 ~]# mkdir /data/a/b mkdir: ...