news 2026/8/5 5:39:50

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/8/5 8:05:11

永磁同步电机PMSM 5 - 7次谐波注入降低转矩脉动实践

永磁同步电机PMSM电机5 -7次谐波注入降低转矩脉动&#xff08;参考文献搭建&#xff09; ①控制思路&#xff1a;以抑制电机电流中较大的 5、7 次谐波分量为目的&#xff0c;实时 提取谐波电流&#xff0c;注入谐波电压来补偿抵消电机运行时电机电流中的谐波&#xff0c;通过抑…

作者头像 李华
网站建设 2026/8/5 8:41:37

万字长文梳理如何扩展大语言模型的上下文长度:算法原理、实现方法与适用场景(RoPE、YaRN、优化Attention、RAG等)

万字长文梳理如何扩展大语言模型的上下文长度&#xff1a;算法原理、实现方法与适用场景&#xff08;RoPE、YaRN、优化Attention、RAG等&#xff09; 原创 功夫熊猫 熊猫AI自习室 2025年12月15日 14:01 在大模型应用或者智能体应用开发中&#xff08;比如智能客服、办公助手、…

作者头像 李华
网站建设 2026/8/5 12:56:02

特征提取+概率神经网络 PNN 的轴承信号故障诊断模型

往期精彩内容&#xff1a; Python轴承故障诊断 (14)高创新故障识别模型-CSDN博客 独家原创 | SCI 1区 高创新轴承故障诊断模型&#xff01;-CSDN博客 基于 GADFSwin-CNN-GAM 的高创新轴承故障诊断模型-CSDN博客 Python轴承故障诊断 (19)基于Transformer-BiLSTM的创新诊断模…

作者头像 李华
网站建设 2026/8/5 11:19:05

单元测试基础知识,面试用得上...

1. 什么是单元测试 “在计算机编程中&#xff0c;单元测试又称为模块测试&#xff0c;是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中&#xff0c;一个单元就是单个程序、函数、过程等&#xff1b;对于面向对象编程&#xff0c;最…

作者头像 李华
网站建设 2026/8/5 12:12:21

美国国务院恢复 Times New Roman 字体

如果你写过本硕论文&#xff0c;或有在政府机关的工作经历&#xff0c;或你的公司对标准化有很强的管理流程。那你一定对Times New Roman 字体不陌生&#xff0c;它被认为是最佳的英文字体。 Times New Roman是一款诞生于1932年的过渡型衬线字体&#xff0c;由Monotype公司为英…

作者头像 李华