news 2026/4/15 18:12:32

WinForms的TreeView默认不支持多行显示,需通过自定义绘制(OwnerDraw)实现节点多行文本渲染,同时调整节点高度适配多行内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WinForms的TreeView默认不支持多行显示,需通过自定义绘制(OwnerDraw)实现节点多行文本渲染,同时调整节点高度适配多行内容

using System;
using System.Drawing;
using System.Windows.Forms;

namespace TreeViewMultiLine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitTreeView();
}

private void InitTreeView()
{
// 1. 配置TreeView自绘模式
TreeView treeView1 = new TreeView
{
Dock = DockStyle.Fill,
DrawMode = TreeViewDrawMode.OwnerDrawText, // 开启自绘文本
Font = new Font("微软雅黑", 9F)
};
this.Controls.Add(treeView1);

// 2. 添加带多行文本的节点
TreeNode rootNode = new TreeNode("知识结构\n(一级节点)\n创建时间:2025-12-15");
TreeNode childNode = new TreeNode("WinForms开发\nTreeView多行实现\n核心:自定义绘制");
rootNode.Nodes.Add(childNode);
treeView1.Nodes.Add(rootNode);

// 3. 绑定DrawNode事件处理多行绘制
treeView1.DrawNode += TreeView1_DrawNode;
// 4. 展开所有节点
treeView1.ExpandAll();
}

private void TreeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
// 绘制节点背景(选中/未选中状态)
e.DrawDefault = false;
Color backColor = e.Node.IsSelected ? SystemColors.Highlight : e.Node.BackColor;
using (Brush backBrush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(backBrush, e.Bounds);
}

// 计算多行文本的尺寸并调整节点高度
SizeF textSize = e.Graphics.MeasureString(e.Node.Text, e.Node.Font, e.Bounds.Width);
if (e.Node.Bounds.Height < textSize.Height)
{
e.Node.Height = (int)Math.Ceiling(textSize.Height);
}

// 绘制多行文本(自动换行)
Color foreColor = e.Node.IsSelected ? SystemColors.HighlightText : e.Node.ForeColor;
using (Brush foreBrush = new SolidBrush(foreColor))
{
// 使用TextRenderer绘制支持换行的文本
TextRenderer.DrawText(
e.Graphics,
e.Node.Text,
e.Node.Font,
e.Bounds,
foreColor,
backColor,
TextFormatFlags.WordBreak | TextFormatFlags.Left);
}

// 绘制节点连接线(可选)
if ((e.State & TreeNodeStates.Selected) != 0)
{
ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds);
}
}
}
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 17:12:29

再也不担心论文!Nano-Banana Pro 论文绘图最全教程发布

再也不担心论文&#xff01;Nano-Banana Pro 论文绘图最全教程发布 原创 Mark Datawhale 2025年12月8日 22:34 在小说阅读器中沉浸阅读 Datawhale干货 教程作者&#xff1a;Mark&#xff0c;华南理工大学 本教程采用一套标准化的工作流&#xff0c;将复杂的绘图任务拆解…

作者头像 李华
网站建设 2026/4/15 17:04:47

第4.0章 自动驾驶七大定位方法总结:从RTK、激光、视觉定位到UWB,一文掌握厘米级定位核心技术

目录 自动驾驶融合定位:多传感器协同的定位革命 1.1 为什么自动驾驶定位仍需融合定位? 1.2 多传感器融合定位的技术路线 1.3 定位精度需求:从米级到厘米级的跨越 七大定位技术深度解析 2.1 组合导航定位(INS+GNSS+IMU) 2.2 IMU航迹推算:短时高精度的秘密武器 2.3 轮速里程…

作者头像 李华
网站建设 2026/4/16 12:25:54

这篇文章旨在解决多模态3D检测中稀疏检测器的性能问题。

全文总结元宝研究背景研究问题:这篇文章旨在解决多模态3D检测中稀疏检测器的性能问题。尽管稀疏检测器在计算成本和下游任务适应性方面优于基于鸟瞰图&#xff08;BEV&#xff09;的检测器&#xff0c;但现有的稀疏检测器忽略了token表示的质量&#xff0c;导致前景质量不佳和性…

作者头像 李华
网站建设 2026/4/16 7:44:12

CatchAdmin v5.0 beta

CatchAdmin v5.0 Beta 已正式发布&#xff0c;这是一个基于 Laravel 12 和 Vue 3 (Element Plus) 构建的前后端分离开源后台管理系统。它的核心是帮助你快速搭建各类后台管理系统。v5.0 Beta 主要更新内容这次更新主要集中在系统架构和开发体验上&#xff0c;主要包括以下几点&…

作者头像 李华
网站建设 2026/4/16 12:18:10

负压防水在电梯井中的应用要点

电梯井作为建筑垂直交通核心&#xff0c;长期面临地下水位变化、结构微变形及高频震动影响&#xff0c;渗漏风险极高。负压防水凭借“主动抗渗结构自防水”双重优势&#xff0c;成为电梯井防水的优选方案&#xff0c;其应用需牢牢把握以下核心要点。 精准探测与基面预处理是基础…

作者头像 李华
网站建设 2026/4/16 13:52:29

【Symfony 8微服务架构新纪元】:手把手搭建高可用服务注册中心

第一章&#xff1a;Symfony 8微服务注册中心概述在现代分布式架构中&#xff0c;微服务的动态性与可扩展性对服务发现机制提出了更高要求。Symfony 8 引入了原生支持的微服务注册中心功能&#xff0c;使开发者能够通过声明式配置实现服务的自动注册与发现。该机制基于轻量级 HT…

作者头像 李华