发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { var node = e.Node; if (node == null) return; //根据父节点状态,全选或全消子节点 node.StateImageIndex = node.StateImageIndex == 1 ? 0 : 1; UpdateSubNodeCheckStatus(node); //确定子节点的父节点是否被选中(所有子节点选中时,父节点才选中) UpdateParentNodeCheckStatus(node); //根节点级别选择互斥 if (node.StateImageIndex != 1) return; var rootNode = GetRootByNode(node); UncheckNextNode(rootNode); UncheckPrevNode(rootNode); } private static TreeNode GetRootByNode(TreeNode node) { while (true) { if (node.Level == 0) { return node; } var parentNode = node.Parent; node = parentNode; } } private void UncheckPrevNode(TreeNode node) { if (node.PrevNode == null) return; node.PrevNode.StateImageIndex = 0; 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 = 0; 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 = 1; } else if (IsSubNodeAllUncheck(parentNode)) { parentNode.StateImageIndex = 0; } else { parentNode.StateImageIndex = 2; } 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==1); } //判断同级的节点是否全不选 private static bool IsSubNodeAllUncheck(TreeNode parentNode) { return parentNode.Nodes.Cast<TreeNode>().All(subNode => subNode.StateImageIndex==0); }
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C# 系统应用之TreeView控件显示树状磁盘文件目录及加载图标
Asp.net 2.0 Treeview无限级无刷新示例
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">void Treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)Node.private void LoadChildNode(TreeNode node)TreeNode subNo...
winfrom权限设置树形菜单
TreeView展开所有节点
TreeView展开所有节点''-----------------------展开所有节点,如=false则折叠所有节点 Dim i As Integer For i = 1 To TreeView1.Nodes.Count TreeView1.Nodes(i).Expanded = True Ne...
浅析C# treeview控件的使用方法
浅析C# treeview控件的使用方法。本文主要介绍C# treeView控件中,添加,修改、删除节点等c# treeview控件的使用方法。} private void button1_Click(object sender, EventArgs e) {//点击该按钮的时...
[C#][控件]高级控件
C#—TreeView控件【转】
C#—TreeView控件【转】C#—TreeView控件【转】TreeNode node = new TreeNode("...");treeView1.Nodes[0].Nodes.SelectedNode = node;(2) TreeNode node = treeView1.private void treeView1...
TreeView绑定产品信息
//创建根节点 TreeNode rootNode = new TreeNode(); //设置根节点属性 rootNode.Text = rowlist[0]["Desn"].ToString(); //设置根节点的key值 root...
delphi Treeview用法
delphi Treeview用法 Treeview用于显示按照树形结构进行组织的数据。删除节点 Treeview.Selected.Delete 编辑节点内容 Treeview.Selected.EditText 注意:由于根节...
微信扫码,在手机上查看选中内容