首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改listView ColumnHeader文本颜色?

如何更改listView ColumnHeader文本颜色?
EN

Stack Overflow用户
提问于 2017-02-11 20:27:39
回答 1查看 4.4K关注 0票数 2

在form1构造函数中

代码语言:javascript
复制
listView1.Scrollable = true;
listView1.View = View.Details;
ColumnHeader header = new ColumnHeader();
            
header.Text = "Files are ready";
header.Name = "col1";
listView1.Columns.Add(header);
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

我想把“文件准备好”的颜色改为红色。所以我试着处理这个事件:

代码语言:javascript
复制
private void listView1_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);
                }
            }
        }

试着把两个刷子都换成红色,但没有改变任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 20:46:40

您可能误将listView1listView1属性设置为true

此属性指示您希望通过自己的代码而不是原始的ListView方法绘制部分ListView。没有它,像DrawColumnHeaderDrawItemDrawSubItem这样的事件将不会由ListView引发。

对于不想自己绘制的列,将e.DrawDefault设置为true。如果只想更改文本颜色,则使用e.DrawBackground()绘制标题的背景:

代码语言:javascript
复制
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    if (e.ColumnIndex != myColumnIndex)
    {
        e.DrawDefault = true; // tell the ListView to draw this header
        return;
    }

    e.DrawBackground();

    // draw your text as you did in your code
    // except the FillRectangle since the background is
    // now already drawn
} 

但是,如果您确实将listView1.OwnerDraw设置为trueListView将向您询问所有内容:标头、项和子项。因此,您还需要订阅DrawItemDrawSubItem事件,并显式地告诉ListView您希望它自己绘制这些内容:

代码语言:javascript
复制
listView1.DrawItem += (sender, e) => { e.DrawDefault = true; };
listView1.DrawSubItem += (sender, e) => { e.DrawDefault = true; };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42180866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档