2010-10-25 93 views
5

我怎樣才能讓它的ListViews控件的背景顏色的項目不同,像WinAmp項目一樣,隨着更改列標題的顏色?不同的ListViews項背景顏色

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

如果你仔細觀察,你可以看到的第一個項目是深灰色的,第二個是黑等。

回答

9

您可以設置ListViewItem.BackColor屬性,但必須手動完成每個交替線。或者,您可以使用DataGridView,它具有AlternateRowStyle屬性,可以自動執行此操作 - 儘管您需要將數據綁定到一系列其他主題的集合中。

對於簡單的情況:

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

如果我們想繪製一個空列表視圖,我們應該怎麼做 – SurajSing 2013-05-07 10:27:08

0

我認爲你在一個循環中添加行(子項目)?如果是這樣,使用循環計數器來確定你想要的顏色。

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

在你的代碼中,首先所有的項目都將以單一顏色繪製,之後 - 其中的1/2將被重新繪製。我想這不是很有效率。所以最好在添加時畫出它們,即只有一次。 – abatishchev 2010-10-25 08:43:12

+0

是的!我同意......只是,我無法在ListView中找到Item Add事件... Item Paint和Sub Item Paint事件似乎沒有引發.... – 2010-10-25 09:24:19

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

您可以撥打項目加入後此方法。或直接使用它添加

1

處理列表框上的DrawItem事件並將DrawMode設置爲OwnerDrawVariableDrawItemEventArgs提供BackColor屬性,可以根據索引設置屬性(同樣在arg中)。