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)临时状态:临时 ...
随机推荐
- 发布ASP(非.Net)网站
1.安装IIS 2.设置网址.端口 3.设置文档(默认访问的文档,比如index.asp,index.htm等) 4.双击asp - 展开行为 - 启用父路径:true - 允许访问父目录 5.应用程 ...
- 【腾讯优测干货分享】如何降低App的待机内存(五)——优化dex相关内存及本章总结
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw 1.5案例:优化dex相 ...
- ASP.NET MVC- JSON ,Jquery, State management and Asynch controllers
一.JSON MVC And JQuery In case you are new to JSON please read this before moving ahead with this la ...
- Quartz 多个触发器
http://www.oschina.net/code/snippet_114990_4440 最近项目中要做个定时生成静态html文件东东,7点到19点每5分钟生成一次,其他时间1小时生成一次,刚开 ...
- sql 生成excel
1创建存储过程 create PROCEDURE [dbo].[UP_Export_Data_To_CSV] @Table NVARCHAR(), @Path NVARCHAR(), @Subfix ...
- 赵雅智:js知识点汇总
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- requestFocusFromTouch , requestFocus
/*if(userNameEditText.isInTouchMode()){ userNameEditText.requestFocusFromTouch(); }else{ userNameEdi ...
- 监控mysql索引使用效率的脚本
SELECT t.table_schema AS db, t.table_name AS tab_name, s.index_name AS index_name, s.colum ...
- 移动Web开发图片自适应两种常见情况解决方案
本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...
- ant来历
看看<ant权威指南>或者ant的网站吧,里面介绍得非常详细ant的来历,目的.ant是tomcat的一个副产品,是在开发tomcat过程中,开发人员需要一个整合编译工具,因为在一个大项目 ...