TreeView CheckBox勾选联动
http://www.cnblogs.com/excellently/p/TreeViewCheckBox.html
在C# Winform项目中用到了TreeView控件,并且需要勾选的功能。父子节点联动,需要实现如下:
1.当选中父节点的时候,如果它的子节点有没有选中的,则选中。
2.当取消选中父节点的时候,将所有子节点都取消选中。
3.当选中子节点的时候,要判断它的父节点中的所有子节点,是不是都已经选中,如果都选中则选中父节点。
4.当取消子节点的时候,要判断父节点是否已经被勾选上,如果勾选上则取消选中父节点。
注意:所有的节点都有可能既是父节点,又是子节点。举例:当效果3满足时,选中了父节点,那么这个父节点有自己的父节点,那么就要再执行一遍效果3.
如果我们处理了一个节点,那么这个节点相关联的父节点,和父节点的父节点,。。。,以及这个节点的子节点,和这个节点的子节点。。。,都会发生联动反应。所以我在处理这个问题的时候,用到了递归。
TreeView有一个事件:AfterCheck。我们不用去命名新的递归,直接用这个事件,当勾选了一个节点的时候,会进入这个事件,在这个事件内用代码去勾选节点的时候,也会触发这个事件。AfterCheck的参数就是勾选的节点。;对于我联动勾选节点的情况而言,这个就是递归。
勾选节点联动代码,只要在AfterCheck事件内编写代码就可以达到效果,下面是代码,没有注释:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
try
{
if (e.Node.Nodes.Count > 0)
{
bool NoFalse = true;
foreach (TreeNode tn in e.Node.Nodes)
{
if (tn.Checked == false)
{
NoFalse = false;
}
}
if (e.Node.Checked == true || NoFalse)
{
foreach (TreeNode tn in e.Node.Nodes)
{
if (tn.Checked != e.Node.Checked)
{
tn.Checked = e.Node.Checked;
}
}
}
}
if (e.Node.Parent != null && e.Node.Parent is TreeNode)
{
bool ParentNode = true;
foreach (TreeNode tn in e.Node.Parent.Nodes)
{
if (tn.Checked == false)
{
ParentNode = false;
}
}
if (e.Node.Parent.Checked != ParentNode && (e.Node.Checked == false || e.Node.Checked == true && e.Node.Parent.Checked == false))
{
e.Node.Parent.Checked = ParentNode;
}
}
}
catch (Exception ex)
{
}
}
上面已经写的很详细了,注释我就不写了。
TreeView CheckBox勾选联动的更多相关文章
- jquery checkbox勾选取消勾选的诡异问题
jquery checkbox勾选/取消勾选的诡异问题jquery checkbox勾选/取消勾选的诡异问题 <form> 你爱好的运动是?<input type=&q ...
- 设置checkbox选中,设置radio选中,根据值设置checkbox选中,checkbox勾选
设置checkbox选中,设置radio选中,根据值设置checkbox选中,checkbox勾选 >>>>>>>>>>>>&g ...
- 获取checkbox勾选的id
需求描述:做批量删除或者批量修改的时候需要获得多个id,根据checkbox勾选来获取对应的d 两种方法: //html代码<table id="table1"> &l ...
- asp.net 翻页时用ViewState保存上一页checkbox勾选的值
/// <summary> /// checkbox勾选取消勾选事件 /// </summary> /// <param nam ...
- 用DIV遮罩解决checkbox勾选无效的问题
在前端开发的过程中,遇到一种情况,需要勾选,为了用户的操作便捷就将click事件放到了DIV上.(其中使用了knockout.js) 代码大概如下: <div id="one" ...
- TreeView checkbox 全选
在使用TreeView 控件 ,进行权限管理的时候,需要使用 checkbox全选. 勾选父节点,子节点全部选中.取消父节点,子节点不选中. 勾选子节点,父节点也选中. 以下是在使用的例子: < ...
- checkbox勾选事件,JQ设置css,下拉框JQ选中
<input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...
- bootstarp treeview 获取勾选和获取Selected选中
在用treeview的时候,经常会遇到一些官网没有详细说明的东西,比如获取勾选和获取选中的方法,获取选中官网是有明显说明的, 如下 : $('#resourceTree').treeview('get ...
- Javascript对checkbox勾选判断,错误提示和按钮变色操作
同意相关条款未打钩时,登录按钮为灰色且无法提交,点击灰色的登录按钮提示同意相关条款,打钩后变成亮色且可以提交信息. 勾选框及文字: <div class="check-rule&quo ...
随机推荐
- kdump简单的介绍
kdump是2.6.16之后,内核引入的一种新的内核崩溃现场信息收集工具.当一个内核崩溃后(我们称之为panic),内核会使用kexec(类似于进程的exec,把当前内核换掉)进入到一个干净的备份内核 ...
- qtp 自动化测试--点滴 自定义显示工具菜单 trzedit
tools-customize-toolbars-勾选后关闭 2 trzedit 使用winobject 方法取值 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.") ...
- 一个好玩的小制作,以及在<a/>中的标签href="javascript:;"/href="javascript:void(0);"/href="javascript:"的用法
一:一个小图标的制作 我们在支付宝.微信等某些地方上传文件时会遇到以下的图标,但是这样的图标其实可以用<a/>标签以及css样式完成, 具体代码如下: <!DOCTYPE html& ...
- linux按时间查询日志
在系统应用集中部署的时候,很多日志因为太多难以定位,获取某段时间的日志是对运维人员非常关键的事情. 一.sed查看某时间段到现在的系统日志: sed -n '/May 20 17/,$p' / ...
- Windows Server 2012 Hyper-V 快照
快照 Hyper-V 可提供擷取執行中虛擬機器快照的能力,因此可輕易地回復至前一狀態,對於測試環境相當有幫助. 快照的功用雖然很不錯,不過每次建立快照時都是會消耗相當的硬碟資源,尤其目前的快照點和上一 ...
- JarvisOJ Misc 炫酷的战队logo
欣赏过了实验室logo,有人觉得我们战队logo直接盗图比较丑,于是我就重新设计了一个,大家再欣赏下? 一开始拿到的BMP文件就打不开,用010打开发现文件头被抹去了,补上了BMP,与文件大小后,发现 ...
- LAMP架构部署和动态网站环境的配置
实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linux+apache+php+mariadb(LAMP ...
- zabbix在ubuntu16.04上的安装
开始安装 zabbix具体安装可以参考官方文档写的很详细,令人高兴的是现在有了中文的版本的翻译,这里简要说下. 上篇文章我写了在ubuntu14.04上安装zabbix,见这里http://www.c ...
- 第二十二天 logging hashlib re 模块
今日内容 logging功能完善的日志模块 re正则表达式模块主要处理字符串匹配 查找 搜索给你一个字符串 要从中找到你需要的东西 爬虫大量使用 hashlib hash算法相关的库 算法怎么算不需要 ...
- POI如何自动调整Excel单元格中字体的大小
问题 目的是要将Excel中的文字全部显示出来,可以设置对齐格式为[缩小字体填充],但是这样的话只能展示出一行数据,字体会变得很小.还有一种办法,设置对齐格式为[自动换行],然后让单元格中的字体自动调 ...