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

C#高级:Winform桌面开发中TreeView的基础例子

一、方案一:免递归使用树

namespace WinFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summary>public string Name { get; set; }/// <summary>/// 本节点ID(根节点Pid=0)/// </summary>public int Id { get; set; }/// <summary>/// 父节点ID/// </summary>public int Pid { get; set; }}//点击触发自定义弹窗输入private async void button1_Click(object sender, EventArgs e){// 假设这是数据源List<WinFormTree> data = new List<WinFormTree>{new WinFormTree { Id = 1, Name = "爷爷", Pid = 0 },new WinFormTree { Id = 2, Name = "父亲", Pid = 1 },new WinFormTree { Id = 3, Name = "儿子", Pid = 2 },new WinFormTree { Id = 4, Name = "女儿", Pid = 2 } // 假设加个子节点};// 调用方法来构建树BuildTree(treeView1,data);}/// <summary>/// 构建树/// </summary>/// <param name="data"></param>private void BuildTree(TreeView treeView,List<WinFormTree> data){//清空树treeView.Nodes.Clear();// 使用字典存储 id -> TreeNode 的映射Dictionary<int, TreeNode> nodeDict = new Dictionary<int, TreeNode>();// 根节点TreeNode rootNode = null;// 遍历所有数据,构建树foreach (var item in data){TreeNode node = new TreeNode(item.Name);// 存储当前节点nodeDict.Add(item.Id, node);// 如果是根节点,保存根节点if (item.Pid == 0){rootNode = node;}else{// 找到父节点并将当前节点添加到父节点下if (nodeDict.ContainsKey(item.Pid)){nodeDict[item.Pid].Nodes.Add(node);}}}// 将树根节点添加到 TreeView 中if (rootNode != null){treeView.Nodes.Add(rootNode);}}/// <summary>/// 树节点选中事件(双击进入该方法)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){// 获取选中的节点的文本内容string selectedNodeText = e.Node.Text;// 将选中的节点文本设置到Label控件label1.Text = "选中的标签是: " + selectedNodeText;}}
}

二、方案二:递归求树

namespace WinFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summary>public string Name { get; set; }/// <summary>/// 本节点ID(根节点Pid=0)/// </summary>public int Id { get; set; }/// <summary>/// 父节点ID/// </summary>public int Pid { get; set; }}//点击触发自定义弹窗输入private async void button1_Click(object sender, EventArgs e){// 假设这是数据源List<WinFormTree> data = new List<WinFormTree>{new WinFormTree { Id = 1, Name = "爷爷", Pid = 0 },new WinFormTree { Id = 2, Name = "父亲", Pid = 1 },new WinFormTree { Id = 3, Name = "儿子", Pid = 2 },new WinFormTree { Id = 4, Name = "女儿", Pid = 2 } // 假设加个子节点};// 调用方法来构建树BuildTree(treeView1,data);}/// <summary>/// 构建树/// </summary>/// <param name="data"></param>private void BuildTree(TreeView treeView,List<WinFormTree> data){//清空树treeView.Nodes.Clear();// 根节点TreeNode rootNode = GetTreeByData(data);// 将树根节点添加到 TreeView 中if (rootNode != null){treeView.Nodes.Add(rootNode.FirstNode);}}private TreeNode GetTreeByData(List<WinFormTree> data, int parentId = 0){// 使用 LINQ 获取所有子节点var nodes = data.Where(x => x.Pid == parentId).Select(item =>{var node = new TreeNode(item.Name);node.Nodes.AddRange(GetTreeByData(data, item.Id).Nodes.Cast<TreeNode>().ToArray()); // 递归添加子节点return node;}).ToList();// 创建一个父节点并将子节点添加进去var parentNode = new TreeNode();parentNode.Nodes.AddRange(nodes.ToArray());  // 添加所有子节点return parentNode;}/// <summary>/// 树节点选中事件(双击进入该方法)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){// 获取选中的节点的文本内容string selectedNodeText = e.Node.Text;// 将选中的节点文本设置到Label控件label1.Text = "选中的标签是: " + selectedNodeText;}}
}

三、效果图 

 

 

相关文章:

C#高级:Winform桌面开发中TreeView的基础例子

一、方案一&#xff1a;免递归使用树 namespace WinFormsApp1 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summ…...

大模型的文件有哪些?

在大模型仓库&#xff08;如Hugging Face&#xff09;中&#xff0c;例如&#xff1a;https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files&#xff0c;通常会发现以下几类文件&#xff1a; 模型权重文件&#xff1a;存储训练好的模型参数&#xff0c;是模型推理和微调…...

QT 国际化(翻译)

QT国际化&#xff08;Internationalization&#xff0c;简称I18N&#xff09;是指将一个软件应用程序的界面、文本、日期、数字等元素转化为不同的语言和文化习惯的过程。这使得软件能够在不同的国家和地区使用&#xff0c;并且可以根据用户的语言和地区提供本地化的使用体验。…...

C 进阶 — 指针的使用

C 进阶 — 指针的使用 主要内容 1、字符指针 2、数组指针 3、指针数组 4、数组传参和指针传参 5、函数指针 6、函数指针数组 7、指向函数指针数组的指针 8、 回调函数 9、指针和数组练习题 前节回顾 1、指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一…...

【经验分享】容器云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…...

MFC学习笔记专栏开篇语

MFC&#xff0c;是一个英文简写&#xff0c;全称为 Microsoft Foundation Class Library&#xff0c;中文翻译为微软基础类库。它是微软开发的一套C类库&#xff0c;是面向对象的函数库。 微软开发它&#xff0c;是为了给程序员提供方便&#xff0c;减少程序员的工作量。如果没…...

电子科技大学《高级算法设计与分析》期末复习问题汇总(客观题-选择题、判断题)

电子科技大学《高级算法设计与分析》问题汇总_已知背包问题的动态规划算法时间复杂度为o(nw),其中n为物品数目,w为背包容量。请-CSDN博客 转载自上面这个链接&#xff0c;古希腊掌管成电专业课的神&#xff01;&#xff01;为了防止他的链接失效&#xff0c;自己也转存一份 &…...

GPTcelltype——scRNA-seq注释

#安装包 install.packages("openai") remotes::install_github("Winnie09/GPTCelltype") #填写API Sys.setenv(OPENAI_API_KEY your_openai_API_key) #加载包 #Load packages library(GPTCelltype) library(openai) #准备文件 #Assume you have already r…...

AI与大数据的深度结合:驱动决策的革命性力量

引言&#xff1a;数字时代的决策挑战 在这个信息爆炸的数字时代&#xff0c;数据早已渗透到我们生活的方方面面。全球每天产生的数据量呈指数级增长&#xff0c;无论是用户的消费行为、设备的运行状态&#xff0c;还是社会热点的实时动态&#xff0c;这些信息的规模和复杂性前所…...

Java多线程与线程池技术详解(九)

面对苦难的态度&#xff1a;《病隙碎笔》“不断的苦难才是不断地需要信心的原因&#xff0c;这是信心的原则&#xff0c;不可稍有更动。” 孤独与心灵的成长&#xff1a;《我与地坛》“孤独的心必是充盈的心&#xff0c;充盈得要流溢出来要冲涌出去&#xff0c;便渴望有人呼应他…...

【常考前端面试题总结】---2025

React fiber架构 1.为什么会出现 React fiber 架构? React 15 Stack Reconciler 是通过递归更新子组件 。由于递归执行&#xff0c;所以更新一旦开始&#xff0c;中途就无法中断。当层级很深时&#xff0c;递归更新时间超过了 16ms&#xff0c;用户交互就会卡顿。对于特别庞…...

什么是大语言模型(LLM)

1. 什么是大语言模型&#xff08;LLM&#xff09;&#xff1f; LLM 是一种基础模型&#xff08;Foundation Model&#xff09;的实例。 基础模型的特点&#xff1a; 使用大量未标注的自监督数据进行预训练。通过学习数据中的模式&#xff0c;生成具有普适性和可适应性的输出…...

柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级

想要探索智能设备的无限可能&#xff1f;Uotan Toolbox&#xff08;柚坛工具箱&#xff09;将是您的得力助手。这款采用C#语言打造的创新型开源工具箱&#xff0c;以其独特的设计理念和全面的功能支持&#xff0c;正在改变着用户与移动设备互动的方式。 作为一款面向专业用户的…...

supervisor使用详解

参考文章&#xff1a; Supervisor使用详解 Supervisor 是一个用 Python 编写的客户端/服务器系统&#xff0c;它允许用户在类 UNIX 操作系统&#xff08;如 Linux&#xff09;上监控和控制进程。Supervisor 并不是一个分布式调度框架&#xff0c;而是一个进程管理工具&#x…...

win11电源设置在哪里?控制面板在哪里?如何关闭快速启动?

不知道微软咋想的&#xff0c;从win10&#xff08;win8&#xff09;开始搞事情&#xff0c;想把windows娱乐化。 娱乐化的特点就是只照顾傻子不考虑专家&#xff0c;系统设置统统藏起来&#xff0c;开机即用——也只能那么用。 搞两套界面做不到吗&#xff1f; win11非常头疼的…...

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper&#xff1a;https://arxiv.org/abs/2411.16318 Code&#xff1a;https://github.com/lehduong/onediffusion Authors&#xff1…...

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务&#xff1f; ​ 假如我们需要搭建一个网上购物系统&#xff0c;那么我们需要哪些功能呢&#xff1f;商品中心、订单中心和客户中心等。 ​ 当业务功能较少时&#xff0c;我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...

人工智能技术的深度解析与推广【人工智能的应用场景】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…...

md5sum -c

md5sum -c xxx 命令用于验证文件的 MD5 校验和是否匹配。具体来说&#xff0c;-c 选项告诉 md5sum 命令去读取指定文件&#xff08;通常是一个包含 MD5 校验和的文件&#xff09;&#xff0c;并与实际文件的 MD5 校验和进行比较。 工作原理&#xff1a; 生成校验和文件&#x…...

excel使用笔记

1.工作表1计算工作表2某列的和 假设我们有两个工作表&#xff0c;分别命名为“Sheet1”和“Sheet2”&#xff0c;我们想要求和这两个工作表中A1到A**单元格的数据&#xff0c;可以在任意一个工作表的单元格中输入以下公式&#xff1a; SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...

主流人脸识别算法框架实战选型指南:从精度、速度到资源消耗的权衡

1. 人脸识别算法框架的核心选型逻辑 第一次接触人脸识别项目时&#xff0c;面对琳琅满目的算法框架确实容易犯选择困难症。经过多个项目的实战验证&#xff0c;我发现选型本质上是在玩一个"不可能三角"游戏——精度、速度和资源消耗这三者永远无法同时达到最优。就像…...

[论文阅读]DeepSeek-V3 Technical Report

DeepSeek-V3 Technical Report https://arxiv.org/abs/2412.19437 核心亮点&#xff1a; 多头潜在注意力机制MLA、DeepSeek MoE架构、多Token预测训练目标MTP 这张图其实已经可以比较清晰地说明MLA和MoE架构了。 对于MLA&#xff0c;主要的策略是把输入的hiddenstates进行降…...

Unlock Music技术解析:音乐格式解密与跨平台播放实践指南

Unlock Music技术解析&#xff1a;音乐格式解密与跨平台播放实践指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: ht…...

DeerFlow企业级部署:支持大规模并发请求的架构升级

DeerFlow企业级部署&#xff1a;支持大规模并发请求的架构升级 1. 企业级部署的核心挑战 当您开始考虑将DeerFlow从个人研究助手升级为企业级应用时&#xff0c;第一个需要面对的问题就是并发处理能力。单个用户的研究请求可能很轻松&#xff0c;但当几十个甚至上百个用户同时…...

避坑指南:在Python 3.7环境用ModelScope跑speech_campplus_sv声纹模型,小心这个隐藏Bug

深度解析Python 3.7环境运行ModelScope声纹模型的隐藏陷阱 当你在Python 3.7环境中满怀期待地运行达摩院的speech_campplus_sv声纹识别模型时&#xff0c;突然遭遇AttributeError: SpeakerVerificationPipeline object has no attribute model_cfg这样的错误提示&#xff0c;确…...

别再只调PID了!用Mahony算法搞定IMU姿态解算(附C代码逐行解析)

Mahony算法实战&#xff1a;从IMU数据到稳定姿态解算的C语言实现 在嵌入式系统和机器人开发中&#xff0c;姿态解算一直是个令人头疼的问题。许多工程师习惯性地依赖PID控制器&#xff0c;却忽视了更优雅的数学解决方案。Mahony算法作为一种基于四元数的姿态融合算法&#xff0…...

终极Goyo.vim配置指南:打造完美无干扰写作环境的10个技巧

终极Goyo.vim配置指南&#xff1a;打造完美无干扰写作环境的10个技巧 【免费下载链接】goyo.vim :tulip: Distraction-free writing in Vim 项目地址: https://gitcode.com/gh_mirrors/go/goyo.vim Goyo.vim是一款专为Vim用户设计的无干扰写作插件&#xff0c;它能帮助你…...

个人财务助手:OpenClaw+千问3.5-35B-A3B-FP8自动解析银行卡账单

个人财务助手&#xff1a;OpenClaw千问3.5-35B-A3B-FP8自动解析银行卡账单 1. 为什么需要本地化财务助手&#xff1f; 每次收到银行发来的PDF账单&#xff0c;我都会陷入手动整理数据的痛苦循环&#xff1a;复制交易记录到Excel、手动分类支出类型、用公式计算各类占比……这…...

【实战】豆包API批量图生图:从脚本到系统的效率跃迁

1. 从脚本到系统的进化之路 记得去年接手一个电商项目时&#xff0c;我需要为2000多款商品生成场景图。最初用简单的Python脚本调用豆包API&#xff0c;结果半夜被报警电话吵醒——脚本卡死了&#xff0c;只完成了不到三分之一的任务。这次惨痛教训让我意识到&#xff0c;批量图…...

4步实现代码块专业化管理:技术文档效率提升指南

4步实现代码块专业化管理&#xff1a;技术文档效率提升指南 【免费下载链接】obsidian-better-codeblock Add title, line number to Obsidian code block 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-better-codeblock 在技术文档创作过程中&#xff0c;代码…...