You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中如何仅将ListView表头文本设置为加粗?

只给WinForms ListView表头设置加粗字体的解决方案

你遇到的问题很典型——直接修改ListView的整体字体肯定会把所有内容都变成加粗,毕竟这个字体是控件全局生效的。要只让表头加粗,得用**自定义绘制(OwnerDraw)**的方式来单独控制表头的样式,具体步骤如下:

步骤1:开启自定义绘制模式

首先需要把ListView的OwnerDraw属性设为true,这样我们才能接管表头和列表项的绘制逻辑:

myListView.OwnerDraw = true;

你可以在窗体设计器的属性面板里设置,也可以在代码(比如窗体构造函数)里添加这行代码。

步骤2:处理DrawColumnHeader事件(绘制加粗表头)

给ListView添加DrawColumnHeader事件处理方法,在这个方法里我们单独绘制加粗的表头文本,同时保留表头的默认背景和边框样式:

private void myListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    // 使用默认样式绘制表头的背景和边框
    e.DrawBackground();
    e.DrawBorder();

    // 创建加粗的字体(基于原字体,仅修改样式为Bold)
    using (var boldFont = new Font(e.Font, FontStyle.Bold))
    {
        // 绘制加粗的表头文本,对齐方式保持默认
        e.Graphics.DrawString(e.Header.Text, boldFont, Brushes.Black, e.Bounds);
    }
}

这里用using语句包裹字体对象,确保使用后自动释放资源,避免内存泄漏。

步骤3:处理DrawItem事件(保持列表项正常样式)

为了让列表项保持原来的正常字体,需要添加DrawItem事件处理方法,用默认逻辑绘制列表项:

private void myListView_DrawItem(object sender, DrawListViewItemEventArgs e)
{
    // 使用默认样式绘制整个列表项(包括文本和背景)
    e.DrawDefault = true;
}

设置e.DrawDefault = true就会让系统用原来的字体和样式绘制列表项,不用我们自己写额外的绘制逻辑。

最后一步:关联事件处理方法

确保在代码里把事件和处理方法关联起来,比如在窗体构造函数里:

public YourForm()
{
    InitializeComponent();
    myListView.OwnerDraw = true;
    myListView.DrawColumnHeader += myListView_DrawColumnHeader;
    myListView.DrawItem += myListView_DrawItem;
}

或者你也可以在设计器里通过事件面板直接绑定这两个事件。

这样设置之后,ListView的表头会变成加粗样式,而列表项依然保持原来的正常字体,完全符合你的需求~

内容的提问来源于stack exchange,提问作者user11674093

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:53:10