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 三种状态的更多相关文章

  1. TreeView 三种状态 没多大变化 只是增加了很多函数以方便调用

    using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace SimpleCusto ...

  2. TreeView的三种状态,全选,全不选,半选中

    我知道的设置treeview节点的三种状态,如果不是买的控件,那么通过代码,只能设置两种状态,我知道的有三种方法, 第一种是重写treeview,第二种是把三种状态做成小图标,让节点复选框随着不同的状 ...

  3. Hibernate 系列 07 - Hibernate中Java对象的三种状态

    引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...

  4. hibernate三种状态

    转自:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transien ...

  5. Hibernate的三种状态及对象生命周期

        理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...

  6. hibernate学习笔记之三 持久化的三种状态

    Hibernate持久化对象有3中状态,瞬时对象(transientObjects),持久化对象(persistentObjects),离线对象(detachedObjects) 下图显示持久化三种状 ...

  7. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

  8. Hibernate延迟加载、三种状态、脏检查 缓存

    一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...

  9. 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】

    一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...

随机推荐

  1. [转]freemaker格式化日期

    转至:http://wentao365.iteye.com/blog/2047234 1.格式化日期 ${updated?string("yyyy-MM-dd HH:mm:ss") ...

  2. ASP.NET- Repeater 嵌套

    我们有时候需要查找出父菜单下面全部的子菜单,然后根据子菜单的ID查找出该类别下面的全部新闻. 通常往往只知道父级菜单的ID,但不知道父级菜单下面有多少个子菜单,也不知道子菜单的ID 所以我们往往需要根 ...

  3. Linux vmstat具体解释(系统IO)

    1. vmstat 能够展现给定时间间隔的server的状态值,包含server的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况 vmstat 2 10 2: 每隔2s 10 : 统计10次 ...

  4. iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)

    项目中用到了地图相关的东西,就把曾经的demo搬了出来,结果发现直接执行之前的demo没有问题,在xcode5下新建项目再把代码粘贴过来就会提示 May 5 11:36:21 infomedia-iP ...

  5. [Javascript] Object.freeze() vs Object.seal()

    let person = { firstName: "Zhentian", lastName: "Wan" }; /*Object.freeze() makes ...

  6. [React] React Fundamentals: Mixins

    Mixins will allow you to apply behaviors to multiple React components. Components are the best way t ...

  7. iOS之定位与地图

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...

  8. 服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux— ...

  9. magento搜索属性值的设置方法

    前台特性(Frontend Properties)在快速搜索中应用(Use in quick search) - 开启此选项,在客户使用Header中的 搜索功能时Magento将搜索所有产品这个At ...

  10. XML操作 之获取指定节点值

    根据节点名称快速查找 指定节点值 using (TextReader stringReader = new StringReader(clearPassResponse)) { XmlReaderSe ...