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);
}
}
}
}