在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);
}
}
}试着把两个刷子都换成红色,但没有改变任何东西。
发布于 2017-02-11 20:46:40
您可能误将listView1的listView1属性设置为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; };https://stackoverflow.com/questions/42180866
复制相似问题