C# TreeView的CheckBox 父/子节点点击联动选择效果
注:
点击时请正常速度点击,不然会出现“奇怪”现象!!! /// <summary>
/// 节点点击 子级->同级->父级
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvRoles_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.ByMouse) return;
ChildrenChecked(e.Node, e.Node.Checked);
ParentChecked(e.Node);
} /// <summary>
/// 把每一个父级当作子级
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private void ParentChecked(TreeNode node)
{
if (node.Parent == null) return;
///单根
//if (node.PrevNode == null && node.NextNode == null)
//{
// node.Parent.Checked = node.Checked;
// return;
//}
///多根
//当前节点两种状态
if (!node.Checked)//节点没被选中,父节点不被选中
{
node.Parent.Checked = node.Checked;
}
else//节点被选中,同级节点决定父节点状态
{
node.Parent.Checked = PeerChecked(node);
}
ParentChecked(node.Parent);//继续上级忽略同级
}
private bool PeerChecked(TreeNode node)
{
if (node == null) return true;
return PeerPrevNodeChecked(node.PrevNode) && PeerNextNodeChecked(node.NextNode);
}
private bool PeerNextNodeChecked(TreeNode node)
{
if (node == null) return true;
return PeerNextNodeChecked(node.NextNode) & node.Checked;
}
private bool PeerPrevNodeChecked(TreeNode node)
{
if (node == null) return true;
if (node.Checked)
return PeerPrevNodeChecked(node.PrevNode);
return false;
}
/// <summary>
/// 把每一个子级当作父级
/// </summary>
/// <param name="node"></param>
/// <param name="check"></param>
private void ChildrenChecked(TreeNode node, bool check)
{
foreach (TreeNode item in node.Nodes)
{
ChildrenChecked(item, check);
item.Checked = check;
}
}
C# TreeView的CheckBox 父/子节点点击联动选择效果的更多相关文章
- EasyUI 树形菜单加载父/子节点
通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree)是不允许的. 但是我们可以在加载树形菜单之前,把它转换为标准标准 ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点
jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点 通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree ...
- ELementUI 树形控件tree 获取子节点同时获取半选择状态的父节点ID
使用element-ui tree树形控件的时候,在选择一个子节点后,使用getCheckedKeys 后,发现只能返回子节点的ID,但是其父节点ID没有返回. 解决办法有三种: 1.element ...
- Cocos2d-x发展---更改父的颜色、透明度的子节点上
标题手段:当我们改变父节点或透明时的颜色.默认是不会影响孩子的节点. 作为交换组看到朋友说可以通过设置相关的参数变化的子节点来实现属性的效果,看了看源代码,记录下来: 引擎版本号为:2. ...
- zTree实现删除树子节点
zTree实现删除树子节点 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树</tit ...
- javascrip实现:若选中TreeView的父节点checkbox,则其子节点全部选中;子节点全部没选中,则父节点也会没选中。
<script type="text/javascript"> function public_GetParentByTagName(element, tagName) ...
- Jstree 使用CheckBox插件 选中父节点时被禁用的子节点也会选中问题
问题描述: 最近用jstree遇到一个问题,使用CheckBox插件时,当父节点选中时,被禁用的子节点也会选中如下 解决方案: 1. 将jstree升级到最新的版本,v3.3.4及以上就可以 2. ...
- treeview插件使用:根据子节点选中父节点
鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡.最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插件供开发者选择.本篇博文讲的就是bootst ...
- Treeview控件如何获得子节点的所有父节点的名称
Delphi或c++ 的treeview控件,比如一个节点上面有个父节点,这个父节点上面还有一个父节点,如何获得这两个父节点的名字呢?请给出实现代码 先定义一个nodevarnode:TTreeNod ...
随机推荐
- TC SRM 591
表示第一次在div1,我要记录一下... 木有挂0,第一题不怎么难的,读题读了20分钟,又想了20分钟,时间有点长,然后各种小心,然后得了140分.... 后两个题,根本木有看,貌似做出来的也不多.. ...
- Linux之硬件管理(不断更新中)
1 查看CPU信息 [root@limt01 .ssh]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...
- 纪念逝去的岁月——C/C++二分查找
代码 #include <stdio.h> int binarySearch(int iList[], int iNum, int iX, int * pPos) { if(NULL == ...
- CoreJava知识点1
一.基础 1.Java最大特点:开源open 2.J2EE由表示层.业务层.数据层组成 3.环境变量:javahome:JDK的安装路径 path:%javahome%\bin ——虚拟机 执行命令 ...
- MongoDB使用操作
一.mongodb常用命令 http://www.cnblogs.com/cxd4321/archive/2011/06/24/2089051.html 二.MongoDB基本使用 http://ww ...
- 处理海量数据的高级排序之——希尔排序(C++)
希尔算法简介 ...
- express3.0安装并使用layout模板
转自:http://cnodejs.org/topic/5073989b01d0b801480520e4 1.安装 express-partials. 方法一:运行 cmd 用 npm install ...
- thinkphp的field方法的用法
ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model->fi ...
- Mysql权限
连接Oracle/Mysql数据库的配置 1.Oracle <context:property-placeholder location="jdbc.properties"/ ...
- fopen的第一个参数不能有'\n'
我刚才写了个程序, 需要操作两个文件. 我用fgets获取标准输入流stdin中的文件名, 然后用fopen打开. 结果编译器总是抱错. 调试了一下,发现fopen返回的是NULL. 我在此处加了 ...