当前位置: 首页 > news >正文

【WinForm UI控件系列】ComboTreeView下拉树选择控件

ComboTreeView 是一个组合控件,将文本框和树形控件结合,支持单选和多选模式的节点选择

功能特性

  • 单选模式:点击节点直接选中并关闭下拉面板
  • 多选模式:通过复选框选择多个节点,支持全选/取消全选
  • 级联选择:勾选父节点时自动级联选中所有子节点
  • 树形结构:支持多层级节点展示
  • 节点连线:可配置是否显示节点连线和展开/折叠按钮
  • 自定义下拉面板尺寸:可自由设置下拉面板的高度
  • 双击选中:多选模式下双击节点文本可快速切换选中状态
  • 圆角边框:支持下拉面板和控件的圆角样式
  • 自定义边框:支持自定义边框颜色和宽度

一、效果图




二、文档

属性说明

属性名类型默认值说明
SelectionMultiModeboolfalse是否为多选模式
NodesTreeNodeCollection空列表节点集合
SelectedNodeTreeNodenull当前选中的节点
SelectedNodesList<TreeNode>空列表已选中的节点集合(只读)
DropDownHeightint200下拉面板高度
ShowLinesbooltrue是否显示节点连线
Textstring选中的文本(只读)
BorderColorColorColor.FromArgb(26, 188, 156)边框颜色
BorderWidthint1边框宽度
CornerRadiusint4圆角半径
ReadOnlybooltrue文本框是否只读
FollowGlobalThemebooltrue是否跟随全局主题切换

事件

事件名说明参数
SelectionChanged选择发生变化时触发ComboTreeViewSelectionChangedEventArgs

使用示例

基本用法

// 创建控件varcomboTreeView=newComboTreeView();comboTreeView.SelectionMultiMode=true;comboTreeView.DropDownHeight=250;comboTreeView.ShowLines=true;// 添加节点varroot1=newTreeNode("节点0");root1.Nodes.Add(newTreeNode("节点1"));root1.Nodes.Add(newTreeNode("节点2"));root1.Nodes.Add(newTreeNode("节点3"));varroot2=newTreeNode("节点4");root2.Nodes.Add(newTreeNode("节点5"));varchild=newTreeNode("节点6");child.Nodes.Add(newTreeNode("节点7"));root2.Nodes.Add(child);comboTreeView.Nodes.Add(root1);comboTreeView.Nodes.Add(root2);// 添加到窗体this.Controls.Add(comboTreeView);comboTreeView.Location=newPoint(20,20);comboTreeView.Size=newSize(200,32);// 绑定事件comboTreeView.SelectionChanged+=(sender,e)=>{varselected=e.SelectedNodes;if(selected.Count>0){MessageBoxEx.ShowInfo(this,$"选中了{selected.Count}个节点");}// 获取选中的文本(控件自动拼接)stringselectedText=comboTreeView.Text;MessageBoxEx.ShowInfo(this,selectedText);};

单选模式

// 设置为单选模式(默认)comboTreeView.SelectionMultiMode=false;// 获取选中节点varnode=comboTreeView.SelectedNode;if(node!=null){Console.WriteLine($"选中:{node.Text}");}

多选模式

// 设置为多选模式comboTreeView.SelectionMultiMode=true;// 全选comboTreeView.SelectAll(true);// 取消全选comboTreeView.SelectAll(false);// 获取所有选中节点foreach(varnodeincomboTreeView.SelectedNodes){Console.WriteLine($"选中:{node.Text}");}// 双击节点文本快速切换选中状态(多选模式下)

自定义外观

// 设置边框颜色和宽度comboTreeView.BorderColor=Color.FromArgb(24,144,255);comboTreeView.BorderWidth=2;// 设置圆角半径comboTreeView.CornerRadius=6;

代码方式选择节点

// 单选模式下设置选中节点comboTreeView.SelectedNode=comboTreeView.Nodes[0];// 多选模式下设置节点勾选状态varnode=comboTreeView.Nodes[0].Nodes[0];node.IsChecked=true;

TreeNode 类

属性

属性名类型说明
Idstring节点唯一标识(默认自动生成)
Textstring节点显示文本
NodesTreeNodeCollection子节点集合
Tagobject自定义数据
Expandedbool是否展开
Selectedbool是否选中(行高亮)
IsCheckedbool是否勾选(复选框)
Checkablebool是否可勾选
Enabledbool是否可用
Levelint节点层级(只读)

构造函数

// 空构造varnode=newTreeNode();// 指定文本varnode=newTreeNode("节点名称");// 指定ID和文本varnode=newTreeNode("node001","节点名称");

方法

// 展开/收起节点node.Expand();node.Collapse();node.Toggle();// 展开/收起所有子节点node.ExpandAll();node.CollapseAll();// 获取所有子节点(递归)varallChildren=node.GetAllChildren();

注意事项

  1. 在多选模式下,需要点击"确定"按钮确认选择
  2. 在多选模式下,点击"取消"按钮会取消本次选择操作
  3. 级联选择只在多选模式下生效
  4. ShowLines 属性控制是否显示节点连线和展开/折叠按钮
  5. 建议根据节点数量适当调整 DropDownHeight
  6. 多选模式下双击节点文本可快速切换选中状态
  7. 下拉面板边框样式与主控件一致(圆角、颜色、宽度)
  8. 确定和取消按钮支持悬停效果
  9. 主题适配
    • 支持自动跟随全局主题切换(亮色/暗色)
    • 深色模式下文本框、下拉面板、树控件背景色自动调整为深色
    • 可通过FollowGlobalTheme属性禁用自动主题切换

三、后记

更多精彩补充完善中,敬请关注,如有需求,有好的建议,请vx留言(xue5zhijing)

http://www.jsqmd.com/news/830159/

相关文章:

  • 知乎API开发指南:5分钟掌握Python数据采集的完整解决方案
  • Ragent AI:从 0 到 1 打造企业级 Agentic RAG 智能体
  • 通过curl快速调试stm32项目的大模型api请求与响应格式
  • 新手也能搞定!用Simulink搭建晶闸管直流调速系统(附完整模型文件)
  • Arduino开发环境搭建与LED控制实战:从零开始硬件编程
  • 基于Matlab元胞自动机模拟(CA)动态再结晶过程
  • QQ截图独立版:免费获取专业级屏幕工具集的完整指南
  • 声明式无侵入爬虫框架Clawless:零代码实现网页数据采集
  • 用Ray处理270万条NYC Taxi数据,我总结了这几个提升效率的Parquet读取技巧
  • JetBrains IDE试用期重置完整指南:快速恢复30天免费使用权限
  • CircuitPython物联网开发实战:从点灯到LoRa无线通信
  • java之集合
  • 关于ImToken智能合约交互
  • 如何用开源缠论量化工具实现几何交易可视化:从算法到实战的完整指南
  • 别再让强光干扰你的项目!OpenMV调低曝光度精准捕捉红色激光点(附完整代码)
  • 告别RDP!用PowerShell的Enter-PSSession远程管理Windows服务器,保姆级配置避坑指南
  • UI-TARS桌面版:5分钟打造你的终极AI智能助手完整指南
  • java作业集1-3总结性blog
  • 3招引爆阴阳师百鬼夜行自动化脚本:效率飙升实战秘籍
  • 抖音创作者开源工具箱:数据采集、内容处理与自动化工作流实战
  • RPG Maker游戏资源解密工具:快速提取加密文件的终极指南
  • LeetCode Hot 100 - 爬楼梯完全题解
  • 别再只会用next了!GDB调试实战:用until、finish和jump命令快速定位Linux C/C++程序中的内存泄漏
  • 基于红外对射传感器与Adafruit IO的智能邮箱检测系统实战
  • 告别内网穿透:用动态IPv6与云解析打造永在线的家庭服务器
  • Arduino ESP32终极开发指南:从零开始构建物联网项目
  • LAMMPS分子动力学模拟终极指南:从零开始掌握原子级计算
  • sklearn实战:NearestNeighbors核心参数与算法选择全解析
  • 从狗腿布线到单元上布线:聊聊VLSI物理设计中那些有趣的布线算法(附图解)
  • ESP32深度睡眠后时间怎么同步?SNTP低功耗时间管理保姆级教程