【问题标题】:Changing Font Style and Color for Column Header in ListView在 ListView 中更改列标题的字体样式和颜色
【发布时间】:2015-01-04 13:48:16
【问题描述】:

我搜索了更改我们使用的 ListView 的标题颜色:

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.Pink, e.Bounds);
    e.DrawText();
}

我们使用相同的事件来更改 ListView 的标题样式:

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    using (StringFormat sf = new StringFormat())
    {
        sf.Alignment = StringAlignment.Center;
        e.DrawBackground();

        using (Font headerFont =
            new Font("Microsoft Sans Serif", 9, FontStyle.Bold)) //Font size!!!!
        {
            e.Graphics.DrawString(e.Header.Text, headerFont, 
                Brushes.Black, e.Bounds, sf);
        }
    }
}

现在我的问题是我想同时更改页眉颜色和页眉样式。所以我是这样写的:

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.Pink, e.Bounds);
    e.DrawText();

    using (StringFormat sf = new StringFormat())
    {
        sf.Alignment = StringAlignment.Center;
        e.DrawBackground();

        using (Font headerFont =
            new Font("Microsoft Sans Serif", 9, FontStyle.Bold)) //Font size!!!!
        {
            e.Graphics.DrawString(e.Header.Text, headerFont,
                Brushes.Black, e.Bounds, sf);
        }
    }
}

但是如果我执行这段代码,标题会变成粗体,但标题颜色没有改变。要同时更改它们(即标题颜色和标题样式),我缺少什么?我不明白。

【问题讨论】:

  • e.DrawBackground(); 看起来不对 - 如果你用自己的颜色填充矩形,为什么还要让 LV 也这样做?
  • @Plutonix 是的,但是当我删除它时,标题显示两次。我现在要做什么?
  • 同时摆脱e.DrawText()TextRenderer.DrawText 更适合呈现控制文本(与 DrawString 相比)
  • @Gopi:请参阅下面的答案。当您删除它时,您会看到重复的绘图,因为您通过 ListView 和自己绘制文本。

标签: c# .net winforms


【解决方案1】:

试试这个,即跳过对e.DrawText()e.DrawBackground()的调用:

private void list_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    using (var sf = new StringFormat())
    {
        sf.Alignment = StringAlignment.Center;

        using (var headerFont = new Font("Microsoft Sans Serif", 9, FontStyle.Bold))
        {
            e.Graphics.FillRectangle(Brushes.Pink, e.Bounds);
            e.Graphics.DrawString(e.Header.Text, headerFont, 
                Brushes.Black, e.Bounds, sf);
        }
    }
}

【讨论】:

  • 谢谢,它有效。当我删除 e.DrawText() 时,它会按我的意愿显示。
  • 注意FillRectangle() 之前DrawString()
  • 如果我将属性“owner draw”设置为 true,则此代码有效。但是现在我的数据/行将不再显示,有什么想法吗?
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多