【发布时间】:2023-03-28 14:03:02
【问题描述】:
如何使 ListViews 控件的项目背景颜色因项目而异,就像在 WinAmp 中一样,同时更改列标题颜色?
如果您仔细观察,您会发现第一项是深灰色,第二项是黑色,依此类推。
【问题讨论】:
-
恭喜播放列表:)
如何使 ListViews 控件的项目背景颜色因项目而异,就像在 WinAmp 中一样,同时更改列标题颜色?
如果您仔细观察,您会发现第一项是深灰色,第二项是黑色,依此类推。
【问题讨论】:
您可以设置ListViewItem.BackColor 属性,但是必须为每条交替行手动完成。或者,您可以使用具有 AlternateRowStyle 属性的 DataGridView 可以自动执行此操作 - 尽管您需要将行数据绑定到一个完全不同的主题集合中。
对于简单的情况:
foreach (ListViewItem item in listView1.Items)
{
item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black;
}
【讨论】:
处理列表框上的DrawItem 事件并将DrawMode 设置为OwnerDrawVariable。
DrawItemEventArgs 提供了一个 BackColor 属性,可以根据索引(也在 arg 中)进行设置。
【讨论】:
我认为您在循环中添加行(子项)?如果是这样,请使用循环计数器来确定您想要哪种颜色。
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;
}
【讨论】:
private static void RepaintListView(ListView lw)
{
var colored = false;
foreach (ListViewItem item in lw.Items)
{
item.BackColor = colored ? Color.LightBlue : Color.White;
colored = !colored;
}
}
您可以在添加项目后调用此方法。或者直接在add上使用
【讨论】:
for (int index = 0; index <= ListView1.Items.Count; index++)
{
if (index % 2 == 0)
{
ListView1.Items(index).BackColor = Color.LightGray;
}
}
【讨论】: