2009-11-29 22 views
7

Jak zmienić kolor tła nagłówków ListView?Zmiana koloru tła nagłówków WinFit ListView

+1

należy zaimplementować niestandardowy rysunek przez przesłonięcie zdarzenia Paint. –

+0

nadpisywanie metody Paint nie robi nic na liście ListView. Musisz użyć mechanizmu OwnerDraw, który zasugerował @David. Pamiętaj tylko, że spowoduje to usunięcie całej stylizacji z kontrolki nagłówka - bez gorącego elementu, bez wskaźników sortowania, bez tła gradientowego. – Grammarian

Odpowiedz

7

Możesz to zrobić, ustawiając właściwość OwnerDraw dla widoku listy na wartość true.

Umożliwia to udostępnienie programów obsługi zdarzeń dla zdarzeń losowania listview.

Jest szczegółowy przykład na MSDN

Poniżej znajduje się przykładowy kod, aby ustawić kolor nagłówka czerwono:

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

myślę (ale jestem szczęśliwy, że okazały się błędne), że z zestawem OwnerDraw na prawdę, musisz również dostarczyć procedury obsługi dla innych zdarzeń losowania, które mają domyślne implementacje, jak pokazano poniżej:

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

Ja na pewno nie mam naged, aby listview narysował elementy bez tego.

+0

Jako słowo ostrzeżenia, ponieważ zajęło mi ponad godzinę, aby to zrozumieć, nie umieszczaj komendy MSGBOX wewnątrz komendy drawcolumnhead! Powoduje zawieszenie się vb.net - w przeciwnym razie zadziałało dobrze – cardmagik

5

Wiem, że jest trochę za późno na imprezę, ale wciąż widziałem ten post i to by mi pomogło. Tutaj jest trochę roztargniony zastosowanie kodu David dostarczonej

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) 
{ 
    e.Graphics.FillRectangle(new SolidBrush(backColor), e.Bounds); 
    e.Graphics.DrawString(e.Header.Text, e.Font, new SolidBrush(foreColor), e.Bounds); 
} 
private static void bodyDraw(object sender, DrawListViewItemEventArgs e) 
{ 
    e.DrawDefault = true; 
} 

Następnie nazwać to w konstruktorze formularza

public Form() 
{ 
    InitializeComponent(); 
    *CLASS NAME*.colorListViewHeader(ref myListView, *SOME COLOR*, *SOME COLOR*); 
} 

Wystarczy wymienić * Nazwa klasy * z niezależnie od klasy można umieścić pierwszy kawałek kodu w i * KILKA KOLORÓW * z jakimś kolorem.

//Some examples: 
Color.white 
SystemColors.ActiveCaption 
Color.FromArgb(0, 102, 255, 102); 

Powodzenia!