2010-10-25 11 views
5

Come posso fare in modo che il colore di sfondo di un controllo ListViews per gli elementi varia da articolo a elemento come in WinAmp, oltre a modificare i colori dell'intestazione di colonna?Varianing ListViews colore sfondo elemento

http://i.stack.imgur.com/30pQy.png

Se si guarda attentamente si può vedere il primo elemento è un grigio scuro e il secondo è nero e così via.

risposta

9

È possibile impostare la proprietà ListViewItem.BackColor, tuttavia questa operazione deve essere eseguita manualmente per ogni linea alternata. In alternativa potresti usare uno DataGridView che ha una proprietà AlternateRowStyle che lo farebbe automaticamente, anche se avrai bisogno di catalogare le tue righe in una raccolta di ordinamenti che è un argomento completamente diverso.

Per il caso semplice:

foreach (ListViewItem item in listView1.Items) 
{ 
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black; 
} 
+1

Cosa dovremmo fare se vogliamo dipingere una vista Lista vuota – SurajSing

0

Suppongo che si aggiungono righe (Voci secondarie) in un ciclo? Se è così usa un contatore di loop per capire quale colore vuoi.

string[] strings = new string[]{"dild", "dingo"}; 
int i = 0; 
foreach (var item in strings) 
{ 
    Color color = i++ % 2 == 0 ? Color.LightBlue : Color.LightCyan; 
    ListViewItem lv = listView1.Items.Add(item); 
    lv.SubItems[0].BackColor = color; 
} 
0
for (int index = 0; index <= ListView1.Items.Count; index++) 
{ 
    if (index % 2 == 0) 
    { 
     ListView1.Items(index).BackColor = Color.LightGray; 
    } 

} 
+0

Nel vostro codice, prima tutti gli articoli saranno dipinti in un unico colore, dopo di che - 1/2 di essi saranno ridipinti. Non è molto efficiente, immagino. Quindi è meglio dipingerli su aggiungere, cioè solo una volta. – abatishchev

+0

Sì! Sono d'accordo ... E 'solo che non riesco a trovare un evento per Item Aggiungi in ListView ... Gli eventi Paint Paint e Sub Item Paint non sembrano sparare .... –

0
private static void RepaintListView(ListView lw) 
{ 
    var colored = false; 
    foreach (ListViewItem item in lw.Items) 
    { 
     item.BackColor = colored ? Color.LightBlue : Color.White; 
     colored = !colored; 
    } 
} 

È possibile chiamare questo metodo dopo l'aggiunta dell'elemento. Oppure utilizzarlo direttamente su Aggiungi

1

Gestire l'evento DrawItem nella casella di riepilogo e impostare DrawMode su OwnerDrawVariable. DrawItemEventArgs fornisce una proprietà BackColor che può essere impostata in base all'indice (anche nell'arg).