Winforms 更改Winform ListView标题的背景色
如何更改ListView标题的背景色 可以通过将列表视图的OwnerDraw属性设置为true来实现这一点 然后,这允许您为listview的绘制事件提供事件处理程序 有一个详细的例子 下面是一些将标题颜色设置为红色的示例代码:Winforms 更改Winform ListView标题的背景色,winforms,listview,Winforms,Listview,如何更改ListView标题的背景色 可以通过将列表视图的OwnerDraw属性设置为true来实现这一点 然后,这允许您为listview的绘制事件提供事件处理程序 有一个详细的例子 下面是一些将标题颜色设置为红色的示例代码: private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArg
private void listView1_DrawColumnHeader(object sender,
DrawListViewColumnHeaderEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
e.DrawText();
}
我认为(但很高兴被证明是错误的)当OwnerDraw设置为true时,您还需要为其他具有默认实现的draw事件提供处理程序,如下所示:
private void listView1_DrawItem(object sender,
DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
如果没有它,我当然无法让listview绘制项目。我知道这对聚会来说有点晚了,但我仍然看到了这篇文章,这会对我有所帮助。下面是david提供的代码的一个小抽象应用程序
using System.Windows.Forms;
using System.Drawing;
//List view header formatters
public static void colorListViewHeader(ref ListView list, Color backColor, Color foreColor)
{
list.OwnerDraw = true;
list.DrawColumnHeader +=
new DrawListViewColumnHeaderEventHandler
(
(sender, e) => headerDraw(sender, e, backColor, foreColor)
);
list.DrawItem += new DrawListViewItemEventHandler(bodyDraw);
}
private static void headerDraw(object sender, DrawListViewColumnHeaderEventArgs e, Color backColor, Color foreColor)
{
using (SolidBrush backBrush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(backBrush, e.Bounds);
}
using (SolidBrush foreBrush = new SolidBrush(foreColor))
{
e.Graphics.DrawString(e.Header.Text, e.Font, foreBrush, e.Bounds);
}
}
private static void bodyDraw(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
然后在表单构造函数中调用它
public Form()
{
InitializeComponent();
*CLASS NAME*.colorListViewHeader(ref myListView, *SOME COLOR*, *SOME COLOR*);
}
只需将*classname*替换为您放入的第一位代码中的任何类,并将*SOME COLOR*替换为某种颜色
//Some examples:
Color.white
SystemColors.ActiveCaption
Color.FromArgb(0, 102, 255, 102);
您需要通过重写Paint事件来实现自定义图形。重写Paint方法在ListView上没有任何作用。您需要使用@David建议的OwnerDraw机制。请记住,这样做会删除标题控件中的所有样式——没有热门项、没有排序指示器、没有渐变背景。作为警告,因为我花了一个多小时才弄清楚,所以不要在drawcolumnheader中放置MSGBOX命令!它挂起了vb.net,否则效果很好