2010-10-25 92 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中)。