C# TreeView组件TreeNode节点自动勾选解决方案(TreeViewNodeCheckHander)
C# TreeView组件TreeNode节点自动勾选解决方案(TreeViewNodeCheckHander)
TreeView 节点自动勾选的场景: 1. 勾选/不勾选父级节点,要同步更新所有子节点的状态 2. 当勾选子节点,父节点必须勾选! 3. 当所有子节点全部勾选,父节点必须是勾选状态 4. 当所有子节点全部不勾选,父节点必须是不勾选状态 TreeViewNodeCheckHander类使用方法: C# Code: private void frmSoftwareFunction_Load(object sender, EventArgs e) { tv.Nodes.Clear(); TreeViewNodeCheckHander.Handle(tv); } //来源:C/S框架网 | www.csframework.com | QQ:23404761 TreeViewNodeCheckHander类: C# Code: /// <summary> /// TreeView组件TreeNode节点自动勾选几种场景及解决方案 /// </summary> public class TreeViewNodeCheckHander { public static void Handle(TreeView tv) { tv.AfterCheck += OnTreeView_AfterCheck; } private static void OnTreeView_AfterCheck(object sender, TreeViewEventArgs e) { //若当前节点包含子节点,勾选或不勾选全部子节点 if (e.Node.Nodes.Count > 0) { SetCheck(e.Node.Nodes, e.Node.Checked); return; } //当前节点已勾选,父级节点也要勾选 if (e.Node.Checked && e.Node.Parent != null && e.Node.Parent.Checked == false) { SetCheck(e.Node.Parent, true); return; } //若当前节点所有同级节点没有勾选,父级节点要取消勾选 if (e.Node.Parent != null && e.Node.Parent.Checked) { if (IsNoCheckedAll(e.Node.Parent.Nodes)) SetCheck(e.Node.Parent, false); return; } } private static void SetCheck(TreeNodeCollection nodes, bool value) { if (nodes.Count == 0) return; TreeView tv = nodes[0].TreeView; try { tv.AfterCheck -= OnTreeView_AfterCheck; foreach (TreeNode node in nodes) node.Checked = value; } finally { tv.AfterCheck += OnTreeView_AfterCheck; } } private static void SetCheck(TreeNode node, bool value) { try { node.TreeView.AfterCheck -= OnTreeView_AfterCheck; node.Checked = value; } finally { node.TreeView.AfterCheck += OnTreeView_AfterCheck; } } /// <summary> /// 是否全部勾选 /// </summary> /// <param name="nodes"></param> /// <returns></returns> public static bool IsCheckedAll(TreeNodeCollection nodes) { int count = 0; foreach (TreeNode N in nodes) if (N.Checked) count++; return count == nodes.Count; } /// <summary> /// 是否全部没有勾选 /// </summary> /// <param name="nodes"></param> /// <returns></returns> public static bool IsNoCheckedAll(TreeNodeCollection nodes) { int count = 0; foreach (TreeNode N in nodes) if (N.Checked == false) count++; return count == nodes.Count; } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 扫一扫加微信
参考文档:
C# Winform的CheckListBox控件灰掉勾选项目解决方案 C#.NET C/S结构版本自动升级解决方案开发文档下载 C#.NET C/S结构版本自动升级解决方案之TCP服务器 C#.NET C/S结构版本自动升级解决方案之升级包实现 C#.NET C/S结构版本自动升级解决方案之升级策略 C#.NET C/S结构版本自动升级解决方案之自我替换 C#.NET C/S结构版本自动升级解决方案之流程图 C#.NET C/S结构版本自动升级解决方案2.0详解 (一) C#.Net局域网版本自动升级解决方案(原创) 解决方案:扩展按钮自定义权限没有出现在权限树给用户勾选 VS解决方案专业改名工具 CSFramework.Rename V1.0 - C#版 增值功能:数据字典自动生成流水号解决方案 C#.NET SQL数据库备份与还原解决方案 C# Winform 开发框架 - 业务单据附件管理解决方案(原) 《CS框架局域网版本自动升级解决方案》.doc
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |