在form1构造函数
中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);
我想将“文件准备就绪”的颜色更改为红色。 所以我尝试了这个事件:
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);
}
}
}
试图将两个画笔改为红色,但它没有改变任何东西。
答案 0 :(得分:1)
您可能错过了将listView1
的{{3}}属性设置为true
。
此属性表示您希望使用自己的代码而不是原始ListView
方法绘制ListView
的部分内容。如果没有DrawColumnHeader
,DrawItem
,DrawSubItem
和ListView
等事件将不会被e.DrawDefault
引发。
对于您不想自己绘制的列,请将true
设置为e.DrawBackground()
。如果您只想更改文本颜色,请使用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
但如果您将true
设置为ListView
,则DrawItem
会询问您所有内容:标题,项目和子项目。因此,您还需要订阅DrawSubItem
和ListView
个事件,并明确告诉listView1.DrawItem += (sender, e) => { e.DrawDefault = true; };
listView1.DrawSubItem += (sender, e) => { e.DrawDefault = true; };
您希望它自己绘制这些内容:
A //branch 1
\
B - C //branch 2
\
D //branch 3