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

WinForm树型控件TreeView

树型控件TreeView

(1)用于显示具有层次结构的数据

(2)由层叠的节点(Node)分支构成,每个节点由图像和标签组成

(3)每个TreeView控件均包含一个或多个根节点,根节点下面包含多个子节点,子节点下面还可以包含子节点。

(4)包含子节点的节点可以展开或折叠

TreeView控件的常用属性:

属性说明
Name获取或设置控件的名称
Dock控件在父容器中的停靠方式
NodesTreeView控件根节点集合
SelectedNode获取或设置当前TreeView控件中选定的树节点
ImageList获取或设置TreeView中所使用的图像集,关联ImageList控件
ImageIndex获取或设置树节点显示的图像在ImageList图像集中的索引
SelectedImgeIndex获取或设置节点被选中时显示的图像在ImageList图像集中的索引

TreeView控件的常用事件:

事件说明
AfterCollapse在折叠树节点后触发
AfterExpand在展开树节点后触发
AfterSelect在更改选中节点后触发
Click在点击TreeView控件时触发

注意:

(1)对TreeView控件的操作,其本质是对树节点的操作。

(2)无论是根节点,还是子节点都是TreeNode对象。

二、添加、删除树节点:

示例:使用TreeView展示学校的专业以及专业下的课程。

添加树节点有两种方式实现:

(1)在TreeNode编辑器中添加、删除树节点

(2)通过代码添加、删除树节点

使用TreeNode编辑器添加删除树节点操作步骤:

实现步骤:

(1)添加窗体“TreeViewForm”,并向其中拖入TreeView控件。

(2)选中TreeView控件,点击右上角的小三角图标,弹出快捷菜单。

(3)点击“编辑节点”,打开“TreeNode编辑器”,按层级关系添加树节点,同时也可以删除树节点。

通过代码添加树节点:

实现步骤:

(1)创建窗体,向其中拖入TreeView控件。

(2)设置TreeView在父容器中停靠,name属性为tv_tencent。

(3)为窗体添加Load事件,在事件处理函数中编码添加树节点,描述腾讯公司管理团队成员的信息。

//方案一:使用TreeNode对象进行添加节点 private void TreeViewForm1_Load(object sender, EventArgs e) { //创建根节点 TreeNode root = new TreeNode("武汉**********学院"); //将根节点添加至TreeView控件上 this.tvSchool.Nodes.Add(root); //创建专业节点 TreeNode tnPro1 = new TreeNode("计算机技术"); TreeNode tnPro2 = new TreeNode("电子商务"); //将专业节点添加至根节点 root.Nodes.Add(tnPro1); root.Nodes.Add(tnPro2); //创建课程节点 TreeNode tnCourse1 = new TreeNode("C#"); TreeNode tnCourse2 = new TreeNode("SQL SERVER"); TreeNode tnCourse3 = new TreeNode("搜索引擎优化"); TreeNode tnCourse4 = new TreeNode("网络营销推广"); //将课程节点添加至专业节点 tnPro1.Nodes.Add(tnCourse1); tnPro1.Nodes.Add(tnCourse2); tnPro2.Nodes.Add(tnCourse3); tnPro2.Nodes.Add(tnCourse4); //展开TreeView的所有节点 this.tvSchool.ExpandAll(); } //方案二:使用键值对的方式进行添加节点 private void TreeViewForm1_Load(object sender, EventArgs e) { this.tvSchool.Nodes.Add("001", "武汉**********学院"); this.tvSchool.Nodes["001"].Nodes.Add("001001", "计算机技术"); this.tvSchool.Nodes["001"].Nodes.Add("001002", "电子商务"); this.tvSchool.Nodes["001"].Nodes["001001"].Nodes.Add("001001001","C#"); this.tvSchool.Nodes["001"].Nodes["001001"].Nodes.Add("001001002", "SQL SERVER"); this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.Add("001002001", "搜索引擎优化"); this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.Add("001002002", "网络营销推广"); this.tvSchool.ExpandAll(); }

通过代码删除树节点:

例如

//通过节点对象删除 this.tvSchool.Nodes.Remove(tnCourse3); //通过索引下标删除 this.tvSchool.Nodes[0].Nodes[1].Nodes.RemoveAt(0); //通过键删除节点 this.tvSchool.Nodes["001"].Nodes["001002"].Nodes.RemoveByKey("001002001");

在上面添加的节点中删除"搜索引擎优化"节点

三、管理节点图标:

需要在TreeView的节点中使用图标,我们需要借助ImageList控件,所以我们首先需要做如下操作:

(1)向窗体中添加ImageList控件,向ImageList控件中添加需要的图片。

(2)将ImageList控件与TreeView控件进行关联,即设置TreeView控件的ImageList属性。

给节点设置图标有两种情况:

(1)所有节点图标都一样:

此时直接在属性栏中或者通过代码找到TreeView控件,设置ImageIndex属性和SelectedImageIndex属性指定图片在ImageList中的索引标号,来设置所有节点正常情况和选中情况下的图片索引。

(2)节点的图标不一致:

【1】通过编辑器添加的节点,直接在编辑中为每个节点设置ImageIndex属性和SelectedImageIndex属性。

【2】通过代码,使用TreeNode对象添加的节点,在代码中为每个TreeNode设置ImageIndex属性和SelectedImageIndex属性。下面代码只为一个节点添加了图标,其他节点省略。。。

//方案一: TreeNode root = new TreeNode("武汉**********学院",0,1); //方案二: TreeNode root = new TreeNode("武汉**********学院"); root.ImageIndex = 0; root.SelectedImageIndex = 1;

【3】通过代码,使用键值对的方式添加的节点,在代码中为每个TreeNode设置ImageIndex属性和SelectedImageIndex属性。下面代码只为一个节点添加了图标,其他节点省略。。。

//方案一: this.tvSchool.Nodes.Add("001", "武汉**********学院",0,1); //方案二: this.tvSchool.Nodes.Add("001", "武汉**********学院"); this.tvSchool.Nodes["001"].ImageIndex = 0; this.tvSchool.Nodes["001"].SelectedImageIndex = 1;

四、响应事件,获取选中节点

为TreeView控件添加AfterSelect事件,节点被选中后触发,在事件处理函数中,获取选中节点,并提示其标签文本值和key。

TreeNode selectedNode = this.tvSchool.SelectedNode; //如果在添加节点的时候,并不是以键值对的方式添加的或者没有设置Name值,那么selectedNode.Name里面是空字符串 MessageBox.Show(selectedNode.Text + "," + selectedNode.Name);
http://www.jsqmd.com/news/1103913/

相关文章:

  • 告别动辄卡壳的“维度地狱”:我是如何用 TRAE 像搭积木一样快速构建复杂流体网络结构的?
  • 论文 deadline 只剩一周?笔墨 AI 流程化辅助,快速搭好完整论文框架
  • 三节串联锂电池充电管理芯片横评,效率最高95%成本低
  • 数字IC功耗来源
  • ADCS-ESC8漏洞防御手册:从原理到实战的Active Directory证书服务加固指南
  • Windows 11系统镜像深度精简技术:tiny11builder架构解析与性能优化指南
  • Kylin Server V10 安装 NVIDIA 驱动(解决 kernel-devel 版本不一致问题)
  • 第二十一届全国大学生智能汽车比赛流程以及计分标准
  • 国内咨询公司盘点:风险预警搭建为何成为平稳运营核心
  • 2026年上半年软考系统集成项目管理师综合知识真题及答案解析(第一批)
  • Qt 开发实战:从零打造一个跨平台串口调试助手
  • 16 亿美元去哪了?我们追踪了一个 TRON 资金盘的完整链上资金网络
  • 2026年如何选择靠谱的品牌设计执行公司?
  • Grok在法律场景的真实能力边界与人机协作实践
  • Xshell连接虚拟机——SSH远程连接入门实践报告
  • 3分钟掌握LinkSwift:告别网盘限速,解锁全平台高速下载的终极指南
  • 开发一个AI Agent 难不难?提示词工程、上下文记忆、任务编排
  • 深入解析核心组件:企业级USB隔离架构的安全体系与日志API开发实战指南
  • DDR电源网络片上去耦电容模型解析与应用
  • 鸿蒙物理 108 篇 第五十五篇 四象互相生克转化
  • 买二手电脑怕被坑?用鲁大师做这5项检查,卖家都不敢糊弄你
  • 百考通让论文回归有血有肉的人类表达
  • 如何为服务器设计高密度DDR4内存模组?K4AAG165WC-BCWE的16Gb容量与低功耗方案解析
  • 陀螺匠底层架构:轻量化插件底座,支持低代码快速搭建、灵活二开专属业务应用
  • AI编程 - OpenCode+OpenSpec 实战:AI 编程完整演示教程
  • Android SSL证书绕过实战:Xposed模块配置与抓包环境搭建
  • 【会议征稿通知 | 西安理工大学主办 | ACM出版 | EI 、Scopus稳定检索】2026年深度学习与自动化国际学术会议 (ICDLA 2026)
  • CCF-GESP计算机学会等级考试2026年6月三级C++T2 字符转换
  • 专治电力高清显示与开发难题
  • HarmonyOS APP《画伴梦工厂》开发第17篇:视频导出与本地保存——DocumentViewPicker