news 2026/4/2 16:16:31

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/3/14 6:45:11

Kafka副本管理核心机制全解析

Apache Kafka 的副本管理器&#xff08;ReplicaManager&#xff09; 中的核心逻辑&#xff0c;主要负责&#xff1a; 处理 Controller 发来的 LeaderAndIsrRequest 请求&#xff08;用于变更分区的 Leader/Follower 角色&#xff09;&#xff1b;管理 Broker 上各个分区的 Lead…

作者头像 李华
网站建设 2026/3/25 9:19:23

医疗Agent赛道又一笔融资,红杉领投

医疗Agent赛道又一笔融资&#xff0c;红杉领投 原创 江 宇 AI应用风向标 2025年12月15日 12:09 时隔10个月&#xff0c;Noah AI再获融资。 作者 | 江宇 编辑 | 漠影 智东西12月15日报道&#xff0c;近日&#xff0c;医疗AI Agent公司若生科技&#xff08;Noah AI&#…

作者头像 李华
网站建设 2026/3/26 7:02:41

H2数据库完全指南:从原理到实战

一、H2数据库概述 1.1 什么是H2数据库&#xff1f; H2 Database 是一款使用Java语言编写的开源嵌入式关系型数据库&#xff08;Embedded Database&#xff09;&#xff0c;由Thomas Mueller于2005年创建。H2的名称来源于"Hypersonic 2"&#xff0c;它是作者之前开发的…

作者头像 李华
网站建设 2026/3/28 22:19:14

全球变暖趋势如何量化?R语言揭示百年气象数据背后的真相

第一章&#xff1a;全球变暖趋势如何量化&#xff1f;R语言揭示百年气象数据背后的真相 数据获取与预处理 全球气温变化研究依赖于长期、连续的气象观测记录。我们使用来自美国国家海洋和大气管理局&#xff08;NOAA&#xff09;发布的全球陆地和海洋表面温度异常数据集&#…

作者头像 李华
网站建设 2026/3/21 16:10:11

腾讯云国际站代理商的MapReduce在跨境电商行业的应用案例有哪些?

腾讯云国际站代理商的 MapReduce 即弹性 MapReduce&#xff08;EMR&#xff09;&#xff0c;虽专门聚焦跨境电商的公开案例较少&#xff0c;但有不少跨境相关企业及跨境电商周边场景的应用案例&#xff0c;且部分中小跨境电商的实践也体现了其适配性&#xff0c;具体如下&#…

作者头像 李华
网站建设 2026/4/1 2:50:41

15:00开始面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到12月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

作者头像 李华