WinForm TreeView 三种状态
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
var node = e.Node;
if (node == null) return;
//根据父节点状态,全选或全消子节点
node.StateImageIndex = node.StateImageIndex == ? : ;
UpdateSubNodeCheckStatus(node); //确定子节点的父节点是否被选中(所有子节点选中时,父节点才选中)
UpdateParentNodeCheckStatus(node); //根节点级别选择互斥
if (node.StateImageIndex != ) return;
var rootNode = GetRootByNode(node);
UncheckNextNode(rootNode);
UncheckPrevNode(rootNode);
}
private static TreeNode GetRootByNode(TreeNode node)
{
while (true)
{
if (node.Level == )
{
return node;
}
var parentNode = node.Parent;
node = parentNode;
}
} private void UncheckPrevNode(TreeNode node)
{
if (node.PrevNode == null) return;
node.PrevNode.StateImageIndex = ;
UpdateSubNodeCheckStatus(node.PrevNode);
UncheckPrevNode(node.PrevNode);
} private void UncheckNextNode(TreeNode node)
{
while (true)
{
if (node.NextNode == null) return;
//node.NextNode.Checked = false;
node.NextNode.StateImageIndex = ;
UpdateSubNodeCheckStatus(node.NextNode);
node = node.NextNode; }
} private static void UpdateParentNodeCheckStatus(TreeNode node)
{
var parentNode = node.Parent;
if (parentNode == null) return; if (IsSubNodeAllCheck(parentNode))
{
parentNode.StateImageIndex = ;
}
else if (IsSubNodeAllUncheck(parentNode))
{
parentNode.StateImageIndex = ;
}
else
{
parentNode.StateImageIndex = ;
} UpdateParentNodeCheckStatus(parentNode);
} private void UpdateSubNodeCheckStatus(TreeNode parentNode)
{
var node = parentNode;
foreach (TreeNode subNode in node.Nodes)
{
subNode.StateImageIndex = node.StateImageIndex;
UpdateSubNodeCheckStatus(subNode);
}
} //判断节点的子节点是否全选
private static bool IsSubNodeAllCheck(TreeNode parentNode)
{
return parentNode.Nodes.Cast<TreeNode>().All(subNode => subNode.StateImageIndex==);
} //判断同级的节点是否全不选
private static bool IsSubNodeAllUncheck(TreeNode parentNode)
{
return parentNode.Nodes.Cast<TreeNode>().All(subNode => subNode.StateImageIndex==);
}
WinForm TreeView 三种状态的更多相关文章
- TreeView 三种状态 没多大变化 只是增加了很多函数以方便调用
using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace SimpleCusto ...
- TreeView的三种状态,全选,全不选,半选中
我知道的设置treeview节点的三种状态,如果不是买的控件,那么通过代码,只能设置两种状态,我知道的有三种方法, 第一种是重写treeview,第二种是把三种状态做成小图标,让节点复选框随着不同的状 ...
- Hibernate 系列 07 - Hibernate中Java对象的三种状态
引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...
- hibernate三种状态
转自:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transien ...
- Hibernate的三种状态及对象生命周期
理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...
- hibernate学习笔记之三 持久化的三种状态
Hibernate持久化对象有3中状态,瞬时对象(transientObjects),持久化对象(persistentObjects),离线对象(detachedObjects) 下图显示持久化三种状 ...
- Hibernate中Java对象的三种状态
Hibernate中Java对象的三种 ...
- Hibernate延迟加载、三种状态、脏检查 缓存
一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...
- 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】
一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...
随机推荐
- 【三支火把】---队列和栈的C程序实现
这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...
- php错误级别
E_ERROR 致命的运行错误.错误无法恢复,暂停执行脚本. E_WARNING 运行时警告(非致命性错误).非致命的运行错误,脚本执行不会停止. E_PARSE 编译时解析错误.解析错误只由分析器产 ...
- iOS 状态栏、导航栏、工具栏、选项卡大小
1.状态栏状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明的黑 ...
- \\ip 映射 指定的网络名不再可用
问题:\\ip 映射 指定的网络名不再可用 解决方法:服务器端打开服务列表 services.msc 启动两个进程 1.Computer Browser 2. Workstation 就正常了~~ ...
- MySQL主主复制+LVS+Keepalived实现MySQL高可用性
http://bestvivi.com/2015/09/09/MySQL%E4%B8%BB%E4%B8%BB%E5%A4%8D%E5%88%B6+LVS+Keepalived%E5%AE%9E%E7% ...
- 在含有null值的复杂类的集合(Collection)中取最大值
在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Clas ...
- Leetcode Python Solution(continue update)
leetcode python solution 1. two sum (easy) Given an array of integers, return indices of the two num ...
- Linux下pcapy的安装问题
在安装pcapy包的时候 cd pcapy-0.10.8/ python setup.py install 报错 error trying to exec ‘cc1plus’: execvp: No ...
- OpenSSH Client信息泄露和缓冲区溢出漏洞
一.风险简述: 2016年1月14日OpenSSH发布官方公告称,OpenSSH Client 5.4~7.1版本中未公开说明的功能(Roaming)存在信息泄漏和缓冲区溢出漏洞,此漏洞可能导致您通过 ...
- print之模块化
这里参考特权同学的模块化思想,将常用的print等任务模块化,便于直接调用,提高代码的效率和易读性.现转载之,以供日后的学习和工作参考. print模块参考代码如下: //============== ...