Изменить цвет фона заголовков Winform ListView - PullRequest
9 голосов
/ 29 ноября 2009

Как вы можете изменить цвет фона заголовков ListView?

Ответы [ 2 ]

11 голосов
/ 29 ноября 2009

Вы можете сделать это, установив для свойства OwnerDraw для представления списка значение true.

Это тогда позволяет вам предоставлять обработчики событий для событий рисования списка.

Подробный пример есть на MSDN

Ниже приведен пример кода для установки красного цвета заголовка:

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

Я думаю (но я рад, что докажу, что ошибался), что при значении OwnerDraw, установленном в true, вам также потребуется предоставить обработчики для других событий рисования, которые имеют реализации по умолчанию, как показано ниже:

    private void listView1_DrawItem(object sender,
                                    DrawListViewItemEventArgs e)
    {
        e.DrawDefault = true;
    }

Мне, конечно, не удалось заставить просмотр списка рисовать элементы без этого.

8 голосов
/ 23 августа 2015

Я знаю, что это немного поздно для вечеринки, но я все еще видел этот пост, и это помогло бы мне. Вот небольшое абстрактное приложение из поставленного Дэвидом кода

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*);
}

Просто замените * ИМЯ КЛАССА * на любой класс, в который вы добавили первый бит кода, а * НЕКОТОРЫЙ ЦВЕТ * какого-нибудь цвета.

//Some examples:
Color.white
SystemColors.ActiveCaption
Color.FromArgb(0, 102, 255, 102);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...