节点勾选设置

TreeView树中节点勾选要求:

1、不选中一个节点,则其所有的子节点都不被选中。

2、选中一个节点,则其所有的子节点都被选中。

3、当一个节点的所有子节点都没有被选中时,该节点也没有被选中。

4、当一个节点的所有子节点中有一个被选中时,则该节点也被选中。

代码中对事件参数e.Action的判断,可以避免在改变节点的Checked的状态时,再次进入AfterCheck(),这样当在AfterCheck()中有其他逻辑响应时,可以做到每次勾选时,其他逻辑也只响应一次。

private void treeView_AfterCheck(object sender, TreeViewEventArgs e){//通过鼠标或者键盘触发事件,防止修改节点的Checked状态时候再次进入if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard){SetChildNodeCheckedState(e.Node, e.Node.Checked);SetParentNodeCheckedState(e.Node, e.Node.Checked);}}//设置子节点状态private void SetChildNodeCheckedState(TreeNode currNode, bool isCheckedOrNot){if (currNode.Nodes == null) return; //没有子节点返回foreach (TreeNode tmpNode in currNode.Nodes){tmpNode.Checked = isCheckedOrNot;SetChildNodeCheckedState(tmpNode, isCheckedOrNot);}}//设置父节点状态private void SetParentNodeCheckedState(TreeNode currNode, bool isCheckedOrNot){if (currNode.Parent == null) return; //没有父节点返回if (isCheckedOrNot) //如果当前节点被选中,则设置所有父节点都被选中{currNode.Parent.Checked = isCheckedOrNot;SetParentNodeCheckedState(currNode.Parent, isCheckedOrNot);}else //如果当前节点没有被选中,则当其父节点的子节点有一个被选中时,父节点被选中,否则父节点不被选中{bool checkedFlag = false;foreach (TreeNode tmpNode in currNode.Parent.Nodes){if (tmpNode.Checked){checkedFlag = true;break;}}currNode.Parent.Checked = checkedFlag;SetParentNodeCheckedState(currNode.Parent, checkedFlag);}}

TreeView隐藏部分节点

WinForm中的TreeView没法根据每个节点的情况设置是否有checkbox,只能用CheckBoxes设置整个树是否有Checkbox,可通过如下方式隐藏部分节点的checkbox。

this.treeView1.CheckBoxes = true;
this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll;
this.treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode);

隐藏节点:

void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e){//隐藏节点前的checkboxif (e.Node.Level == 0 || e.Node.Level == 1)HideCheckBox(this.treeView1, e.Node);e.DrawDefault = true;}[StructLayout(LayoutKind.Sequential, Pack = 8, CharSet = CharSet.Auto)]private struct TVITEM{public int mask;public IntPtr hItem;public int state;public int stateMask;[MarshalAs(UnmanagedType.LPTStr)]public string lpszText;public int cchTextMax;public int iImage;public int iSelectedImage;public int cChildren;public IntPtr lParam;}[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);private const int TVIF_STATE = 0x8;private const int TVIS_STATEIMAGEMASK = 0xF000;private const int TV_FIRST = 0x1100;private const int TVM_SETITEM = TV_FIRST + 63;private void HideCheckBox(TreeView tvw, TreeNode node){TVITEM tvi = new TVITEM();tvi.hItem = node.Handle;tvi.mask = TVIF_STATE;tvi.stateMask = TVIS_STATEIMAGEMASK;tvi.state = 0;SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);}

TreeView递归加载节点

C#遍历指定文件夹下所有子文件夹及文件并添加到目录树:

private void Form1_Load(object sender, EventArgs e){TreeNode root = new TreeNode();//根目录名称root.Text = "目录";//根目录路径GetFiles(@"E:\Tools", root);treeView1.Nodes.Add(root);}private void GetFiles(string filePath, TreeNode node){DirectoryInfo folder = new DirectoryInfo(filePath);node.Text = folder.Name;node.Tag = folder.FullName;FileInfo[] chldFiles = folder.GetFiles("*.*");foreach (FileInfo chlFile in chldFiles){TreeNode chldNode = new TreeNode();chldNode.Text = chlFile.Name;chldNode.Tag = chlFile.FullName;node.Nodes.Add(chldNode);}DirectoryInfo[] chldFolders = folder.GetDirectories();foreach (DirectoryInfo chldFolder in chldFolders){TreeNode chldNode = new TreeNode();chldNode.Text = folder.Name;chldNode.Tag = folder.FullName;node.Nodes.Add(chldNode);GetFiles(chldFolder.FullName, chldNode);}}

参考:

C# TreeView使用技巧

C# TreeView控件说明相关推荐

  1. dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  2. C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件

    1.调出 TreeView控件 或  ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...

  3. 递归遍历文件夹,并添加到TreeView控件中

    遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...

  4. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色  在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...

  5. matlab treeview,treeview控件

    高分在线等:C#中如何给treeview控件上的节点前添比如有一treeview1控件,需要在其所有节点前均加一静态小图标(所有节点我也新手,正好刚用过这功能.如下: 1. 到工具箱中拖一个image ...

  6. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...

  7. TreeView控件的展开与折叠

    在窗体中添加一个TreeView控件,设置CheckBox属性为True,绑定数据 Archive jkj = new Archive();//自定义类         public void Bin ...

  8. 给TreeView控件绑定数据

    TreeView控件显示Node对象的等级体系结构,每个Node对象包含了一个标签和可选的点位图.TreeView控件通常用于显示文档头.索引中的条目.磁盘上的文件和目录或者可以显示为等级结构的各种其 ...

  9. 部门树形结构,使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

  10. TreeView控件应用--访问文件或文件夹(一)

    C#用TreeView访问文件或文件夹,通过递归,展开所有文件夹(类似资源管理器的树形窗体) 首先,算法是用递归算法,不断的递归文件.以此来遍历整个电脑的磁盘内容,过程也很简单.这种算法的时间复杂度太 ...

最新文章

  1. python画出心形图-python如何绘制心形
  2. Nosql and Mongodb 介绍
  3. 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题
  4. LAMP 2.2 Apache配置静态缓存
  5. 使用Elastic APM监控你的.NET Core应用
  6. 3d数学基础图形与游戏开发 英文版_1850款文字标题字幕条,AE图形预设包,logo生成神器...
  7. 发动机冷启动和热启动的区别_「牛车实验室」AGM自动启停蓄电池解读 和普通蓄电池到底有什么区别...
  8. 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...
  9. Search API
  10. JavaScript MVC 框架开源软件
  11. 必做作业3:原型化系统
  12. IOS 拉伸图片(封装)
  13. java缓存机制面试题,电子版已问世
  14. java出名的外国文献_三大牛人看外国文献的方法(搜索无重复) - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  15. 八位数字后加逗号_【PTE干货】英文数字的读法
  16. 北斗在线app服务器,北斗卫星导航app,北斗卫星导航app官网手机版预约 v1.0 - 浏览器家园...
  17. Outlook打开工享Calendar
  18. 【Apache Shiro 身份认证绕过漏洞 (CVE-2022-32532)-漏洞复现实战——关注紫灵小姐姐不踩坑】
  19. 机器学习中,正态分布为何如此重要?
  20. 配置完dcom需要重启计算机,DCOM电脑自动重启(win7系统一直反复重启)

热门文章

  1. gtkpod + ipod-convenience 后同步 iTunes 出现 -54 未知错误的解决方法
  2. 【Distributed】分布式Ceph存储系统之相关应用
  3. 秋裤都穿上了,高尔夫模拟器也得用上吧
  4. [2016/7/11]白山云科技实习第一天
  5. 俄版百度44.7G源码泄露!遭前员工背刺,涉及搜索地图打车电商等所有主要服务...
  6. 【leetcode-Python】-找数学规律-LCP 29. 乐团站位
  7. [ Jackson ] 简单使用
  8. Mac版微信突然显示音频设备启动失败
  9. Codeforces Kitchen Plates
  10. 逆向分析软件去除易语言花指令完成注册