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

【WinForm详细教程八】WinForm中的TreeView控件

文章目录

  • `TreeView` 基本的知识
    • 属性
    • 方法
    • 事件
  • `TreeView` 案例演示
    • 案例一:
    • 案例二:

TreeView 控件 用于展示分层数据,它以树形结构展示信息,每个节点可以有一个或多个子节点。TreeView 控件允许用户以可展开和可折叠的形式查看复杂的层次信息。

TreeView 基本的知识

属性

  • Nodes: 一个 TreeNodeCollection,包含控件的根节点。
  • SelectedNode: 获取或设置当前选中的 TreeNode。
  • CheckBoxes: 确定是否在每个树节点旁边显示复选框。
  • ShowPlusMinus: 确定是否显示用于展开和折叠树节点的加号和减号。
  • ShowLines: 确定是否显示树节点之间的连接线。

方法

  • BeginUpdate(): 暂停绘制控件,可以用于在添加大量节点时避免重绘,提高性能。
  • EndUpdate(): 恢复正常绘制控件,与 BeginUpdate() 配对使用。
  • CollapseAll(): 折叠所有的树节点。
  • ExpandAll(): 展开所有的树节点。
  • GetNodeAt(): 返回位于指定点的 TreeNode。

事件

  • AfterCheck / BeforeCheck: 在节点的复选框被用户选中或取消选中之后/之前发生。
  • AfterSelect / BeforeSelect: 在选择某个节点之后/之前发生。
  • AfterCollapse / BeforeCollapse: 在节点被折叠之后/之前发生。
  • AfterExpand / BeforeExpand: 在节点被展开之后/之前发生。
  • NodeMouseClick: 当鼠标单击 TreeNode 时发生。

节点介绍 - TreeNode

  • Name: 节点的唯一标识符。
  • Text: 节点显示的文本。
  • Nodes: 子节点的集合。

动态加载菜单表

  • 数据库中存储节点与子节点的关系,但层次关系不明显。
  • 动态加载数据到 TreeView 控件的流程:
    1. 从数据库获取表数据。
    2. 使用递归方法创建节点,并添加到 TreeView。
    3. 调用方法在 TreeView 中创建并显示层次结构数据。

TreeView 节点的勾选处理

  • 当父节点勾选或取消勾选时,所有子节点状态跟随变化。
  • 任一子节点勾选,父节点也应勾选。
  • 所有子节点都未勾选,父节点也不勾选。

TreeView 案例演示

案例一:

namespace WinFormsTest
{public partial class frmTreeView : Form{public frmTreeView(){InitializeComponent();}private void frmTreeView_Load(object sender, EventArgs e){TreeView fileTree = new TreeView();// 单独设置 Width 和 HeightfileTree.Width = 200;  // 设置宽度为200像素fileTree.Height = 600; // 设置高度为400像素// 或者使用 Size 属性同时设置宽度和高度fileTree.Size = new Size(200, 300); // 宽度200像素,高度400像素// 开始更新节点,防止在添加节点时进行重绘fileTree.BeginUpdate();TreeNode rootNode = new TreeNode("我的电脑");fileTree.Nodes.Add(rootNode);// 添加几个文件夹作为子节点TreeNode documentsNode = new TreeNode("文档");TreeNode picturesNode = new TreeNode("图片");TreeNode musicNode = new TreeNode("音乐");TreeNode videoNode = new TreeNode("视频");rootNode.Nodes.Add(documentsNode);rootNode.Nodes.Add(picturesNode);rootNode.Nodes.Add(musicNode);rootNode.Nodes.Add(videoNode);// 完成节点添加后,恢复控件的绘制fileTree.EndUpdate();fileTree.AfterSelect += new TreeViewEventHandler(fileTree_AfterSelect);this.Controls.Add(fileTree);}private void fileTree_AfterSelect(object sender, TreeViewEventArgs e){if (e.Node.Text != "我的电脑"){// 当用户选择一个节点时,显示选中节点的信息MessageBox.Show("选中的文件夹: " + e.Node.Text);}}}
}

效果:

动画10

案例二:

using System.Data;
using WinFormsTest.Helper;
namespace WinFormsTest
{public partial class frmTreeView2 : Form{public frmTreeView2(){InitializeComponent();}private void frmTreeView2_Load(object sender, EventArgs e){treeView1.Nodes.Clear();//清除所有节点//1. 获取数据DataTable dtMenus = DBHelper.GetDataTable("select Id,MName,ParentId from MenuInfos", 1);//3.调用方法,添加节点CreateNode(dtMenus, null, 0);}//2.添加节点(递归)private void CreateNode(DataTable dt, TreeNode pNode, int parentId){//1.获取要创建的节点数据DataRow[] rows = dt.Select("ParentId=" + parentId);if (rows.Length > 0){foreach (DataRow r in rows){//2.新建子节点TreeNode node = new TreeNode();node.Name = r["Id"].ToString();node.Text = r["MName"].ToString();//3.直接添加到TreeView Nodes  还是添加指定节点的Nodes里? if (pNode != null)pNode.Nodes.Add(node);elsetreeView1.Nodes.Add(node);//4.判断当前节点下有没有子节点//这个是递归,直到rows为0即当前节点没有子节点时结束递归CreateNode(dt, node, int.Parse(node.Name));}}}/添加父子勾选关联功能        
//1.父节点勾选或取消,它的所有子节点与它一致  
//2.只要有一个子节点勾选,父节点就勾选
//	子节点全部不勾选,父节点就不勾选bool isMouseClick = true;private void treeView1_NodeMouseClick_1(object sender, TreeNodeMouseClickEventArgs e){isMouseClick = false;//子节点勾选SetChildNodesState(e.Node);//父节点勾选SetParentNodeState(e.Node);isMouseClick = true;}private void treeView1_AfterCheck_1(object sender, TreeViewEventArgs e){if (isMouseClick){treeView1.SelectedNode = e.Node; //当前操作节点选中}}//递归处理子节点的勾选private void SetChildNodesState(TreeNode node){if (node.Nodes.Count > 0){foreach (TreeNode n in node.Nodes){n.Checked = node.Checked;SetChildNodesState(n);}}}private void SetParentNodeState(TreeNode node){TreeNode pNode = node.Parent;//获取父节点if (pNode != null){bool bl = false;foreach (TreeNode n in pNode.Nodes){if (n.Checked){bl = true;break;}}pNode.Checked = bl;SetParentNodeState(pNode);}}}
}

效果:

新建一个SQL数据库

image-20231107192018880

展示

请添加图片描述

添加父子勾选关联功能后

动画12

精彩推荐:
【C#进阶一】C#中的数组(Array)、集合(ArrayList,Queue,Stack, HashList)、List<T>、字典(Dictionary<K,T>)和双向链表LinkedList
【C#进阶八】C#中的序列化与反序列化下(二进制序列化、XML序列化及JSON序列化)

【C#进阶】C#语法中一些常用知识点总结
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件
【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件
【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件
【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式

如果你对智能建造专业感兴趣,或者是相关方向的学生,老师或者从业人员,欢迎通过微信公众号【智能建造小硕】加入我们!

在这里插入图片描述
希望有所帮助,同时欢迎关注我们,后面将更新更多相关内容!

相关文章:

【WinForm详细教程八】WinForm中的TreeView控件

文章目录 TreeView 基本的知识属性方法事件 TreeView 案例演示案例一:案例二: TreeView 控件 用于展示分层数据,它以树形结构展示信息,每个节点可以有一个或多个子节点。TreeView 控件允许用户以可展开和可折叠的形式查看复杂的层…...

〔003〕虚幻 UE5 基础教程和蓝图入门

✨ 目录 🎈 新建项目🎈 快捷操作🎈 镜头移动速度🎈 新建蓝图关卡🎈 打印字符串🎈 蓝图的快捷键🎈 场景中放置物体🎈 通过蓝图改变物体位置🎈 展现物体运动轨迹&#x1f3…...

如何像优秀测试人员那样思考?

优秀测试和普通测试之间的差别在于测试人员如何思考:测试人员的测试设计选择,解释所观察到的能力,以及非常令人信服地分析描述这些现象的能力。 然而,在实际工作中,我们更多的看到了测试人员在电脑前点点点&#xff0…...

NOIP2023模拟13联测34 A. origenNOIP2023模拟13联测34 A. origen

NOIP2023模拟13联测34 A. origen 文章目录 NOIP2023模拟13联测34 A. origen题目大意思路code 题目大意 给定 n n n 个整数 a 1 , a 2 , a 3 ⋯ a n a_1,a_2,a_3\cdots a_n a1​,a2​,a3​⋯an​ ,求 ∑ i 1 n ∑ j i n ( ⊕ k i j a k ) 2 m o d 998244353 \…...

HttpClient学习(Java)

一、介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 我们可以通过这个HttpClient工具,在java代码中去构造和发送ht…...

信息系统项目管理师之各工具的定义及解释

数据收集技术 用于从各种渠道收集数据与信息。 数据分析技术 用于组织评估和评价数据与信息。 数据表现技术 用于显示用来传递数据和信息的图形方式或其他方法。 决策技术 用于从不同备选方案选择行动方案。 沟通技巧 用于在干系人之间传递信息。 人际关系与团队技能…...

golang的defer执行时机案例分析

package main import "fmt"func calcFunc(x int, y int) int {return x y }func main() {// defer语句的执行顺序是,从右到左,逆序执行deferDemo()// deferDemo1函数demo1 : deferDemo1()fmt.Println(demo1) // 0// deferDemo2函数demo2 : deferDemo2()f…...

2.HTML中常用浏览器

2.常用浏览器 2.1 什么是浏览器 浏览器是网页显示,运行的平台。常用的浏览器有IE,火狐,谷歌,Safari和Opera等 平时成为五大浏览器 2.2 浏览器内核 浏览器内核(渲染引擎):负责读取网页内容&…...

Vue 监听store数据变化

天冷了,手也冷了,于学问于个人成长不能因为冷而荒废。毕业这么多年,只能感慨。这样努力的工作只是解决了温保问题,何时才能任性的过一回说走就走的自由生活? 大抵这样的梦想也就只能停留在梦里与期待中吧,与…...

智能交通和自动驾驶技术

一、定义 智能交通和自动驾驶技术是指利用先进的信息技术和人工智能技术,实现交通系统的智能化和自动化。智能交通和自动驾驶技术不仅可以提高交通系统的效率和安全性,还可以改善人们的出行体验,促进城市可持续发展。 智能交通和自动驾驶技…...

CentOS7安装部署StarRocks

文章目录 CentOS7安装部署StarRocks一、前言1.简介2.环境 二、正文1.StarRocks基础1)架构图2)通讯端口 2.部署服务器3.安装基础环境1)安装JDK 112)修改机器名3)安装GCC4)关闭交换分区(swap&…...

树形Dp 2925. 在树上执行操作以后得到的最大分数

2925. 在树上执行操作以后得到的最大分数 两次DFS class Solution { public:// 节点状态有两种,选和不选,// dp(u, fa, 0) 不选u 节点,其他节点都可以选,值为以u为根的子树的所有节点的和- 根节点的值。// dp(u, fa, 1) 选u节点&…...

选择企业云盘?品牌推荐和评价解析

企业云盘是如今热门的企业协作工具,为企业提供了文件存储、文件共享服务。市面上的企业云盘千千万,到底哪个企业云盘好用?哪些品牌值得信赖呢? 好用的企业云盘,不能不提,Zoho Workdrive企业云盘为企业提供…...

redis: 记录一次线上redis内存占用过大问题解决过程

引言 记录一次线上redis占用过大的排查过程,供后续参考 问题背景 测试同事突然反馈测试环境的web系统无法登陆,同时发现其他子系统也存在各类使用问题 排查过程 1、因为首先反馈的是测试环境系统无法登陆,于是首先去查看了登陆功能的报错…...

数据资产、数字资产、数据资源及数据资产入表

数据要素 《中共中央关于坚持和完善中国特色社会主义制度推进国家治理体系和治理能力现代化若干重大的决议》(2019) 首次将数据列为生产要素 《关于构建更加完善的要素市场化配置体制机制的意见》(2020.3) 数据成为土地、劳动力、…...

Docker之Centos安装

介绍 Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的, 而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。 在很多版本的CentOS中是不支持更新最新的一些补丁包的。由于我们学习的环境都使用的是CentOS,因此这里我们将Do…...

SQL注入漏洞:CMS布尔盲注python脚本编写

SQL注入漏洞:CMS布尔盲注python脚本编写 文章目录 SQL注入漏洞:CMS布尔盲注python脚本编写库名爆破爆破表名用户名密码爆破 库名爆破 import requests #库名 database"" x0 while requests.get(urlf"http://10.9.47.77/cms/show.php?id33%20and%20length(data…...

security

Java Security 是一个用于在 Java 平台上提供安全性的框架。下面是 Java Security 的一些主要知识点: 1. 加密和解密:Java Security 提供了一组加密和解密 API,可以实现各种加密标准,如 AES、DES、RSA 等。 2. 数字签名&#xf…...

了解web3,什么是web3

Web3是指下一代互联网,它基于区块链技术,将各种在线活动更加安全、透明和去中心化。Web3是一个广义的概念,它包括了很多方面,如数字货币、去中心化应用、智能合约等等。听不懂且大多数人听到这个东西,直觉感觉就像骗子…...

Harbor企业级Registry基础镜像仓库的详细安装使用教程(保姆级)

Harbor Docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是vmware一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。 ha…...

3分钟打造macOS级桌面体验:开源光标主题全攻略

3分钟打造macOS级桌面体验:开源光标主题全攻略 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你知道吗?每天在电脑前工作8小时,你的鼠标指针会出现…...

课堂教学质量综合评分系统

目录 一、项目环境与目录结构 1. 环境要求 2. 推荐目录结构 二、核心类设计:ClassroomScorer 三、关键代码深度解析 1. 基础路径配置 2. 初始化方法:极致灵活的配置 3. 上下文管理器:统一封装 CSV 读取 4. 数据加载:4 类 …...

避免Java Stream重复消费:高效过滤Map的策略

本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception,即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性,通过将外部过滤条件转换为集合,优化Map的过滤操作,提供高效、符合最佳实践的解决方案&#x…...

大致说一下spring bean的生命周期

面试 1、实例化 Bean 2、给 Bean 属性赋值 3、初始化 Bean 4、使用 Bean 5、销毁 Bean package com.example.demo.bean;import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Value; import …...

SEO_快速提升流量的五个SEO关键操作步骤

<h3 id"seoseo">SEO:快速提升流量的五个SEO关键操作步骤</h3> <p>在数字化时代&#xff0c;网站的流量直接影响着企业的市场竞争力。如何让你的网站在搜索引擎上排名靠前&#xff0c;吸引更多的访客&#xff0c;这是每个网站运营者都面临的重要课题…...

腾讯王者荣耀强化学习环境:打造专业AI训练平台的完整指南

腾讯王者荣耀强化学习环境&#xff1a;打造专业AI训练平台的完整指南 【免费下载链接】hok_env Honor of Kings AI Open Environment of Tencent 项目地址: https://gitcode.com/gh_mirrors/ho/hok_env 在人工智能研究领域&#xff0c;游戏环境一直是强化学习算法的理想…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

SDMatte多平台适配实践:Chrome/Firefox/Safari在Web抠图交互中的兼容性与性能表现

SDMatte多平台适配实践&#xff1a;Chrome/Firefox/Safari在Web抠图交互中的兼容性与性能表现 1. 引言 SDMatte是一款面向高质量图像抠图场景的AI模型&#xff0c;特别擅长处理主体分离、透明物体提取、边缘精修等任务。对于玻璃、薄纱、羽毛、叶片等边缘细节复杂或半透明目标…...

汉语到底比其他语言强在哪?

汉语到底比其他语言强在哪&#xff1f;只要一提起这个话题&#xff0c;弹幕里肯定有朋友要说了&#xff1a;哎呀&#xff0c;英语才是世界语言&#xff0c;汉语不严谨&#xff0c;语言没有高下之分&#xff0c;禁止拉踩。这种论调咱们听了一百年了&#xff0c;甚至不少自己人都…...

Linux驱动——uart子系统驱动注册分析

韦东山驱动大全uart子系统笔记自整理——08_UART驱动情景分析_注册由于韦东山老师uart子系统的08注册情景分析的笔记很简略&#xff0c;所以在学完这节课后自己整理了一份详细笔记&#xff0c;包含TTY驱动框架&#xff0c;数据结构分析&#xff0c;以及注册过程分析&#xff0c…...