使用C# Winforms(3.5)。是否可以在列表视图中将行颜色设置为自动交替?或者,每次向列表视图中添加新行时,是否需要手动设置行颜色?根据MSDN项目,手动方法如下所示:
//alternate row color if (i % 2 == 0) { lvi.BackColor = Color.LightBlue; } else { lvi.BackColor = Color.Beige; }
rks48beu1#
将ListView OwnerDraw属性设置为true,然后实现DrawItem处理程序:
private void listView_DrawItem(object sender, DrawListViewItemEventArgs e) { e.DrawDefault = true; if ((e.ItemIndex%2) == 1) { e.Item.BackColor = Color.FromArgb(230, 230, 255); e.Item.UseItemStyleForSubItems = true; } } private void listView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) { e.DrawDefault = true; }
这个例子很简单,你可以改进它。
v6ylcynt2#
恐怕这是Winforms中的唯一方法。不过XAML通过使用样式允许这样做。
dm7nw8vv3#
据我所知,WPF允许使用<Styles/>在任何控件上设置样式,但在winforms中,恐怕这是唯一的方法。
<Styles/>
velaa5lx4#
for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2)) { listView.Items[i].BackColor = Color.Gainsboro; }
在属性菜单中设置主背景,然后使用此代码设置替换颜色。
vaqhlq815#
您也可以利用主控描绘,而非明确设定属性。主控描绘较不易受到项目重新排序的影响。下面是如何在Better ListView(提供免费和扩展版本的第三方组件)中执行此操作-只需处理一个DrawItemBackground事件:
DrawItemBackground
private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs) { if ((eventArgs.Item.Index & 1) == 1) { eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter); } }
实验结果:
sz81bmfz6#
将ListView的OwnerDraw属性设置为true,然后实现DrawItem处理程序。如何在ListView控件中改变行的颜色?
6条答案
按热度按时间rks48beu1#
将ListView OwnerDraw属性设置为true,然后实现DrawItem处理程序:
这个例子很简单,你可以改进它。
v6ylcynt2#
恐怕这是Winforms中的唯一方法。不过XAML通过使用样式允许这样做。
dm7nw8vv3#
据我所知,WPF允许使用
<Styles/>
在任何控件上设置样式,但在winforms中,恐怕这是唯一的方法。velaa5lx4#
在属性菜单中设置主背景,然后使用此代码设置替换颜色。
vaqhlq815#
您也可以利用主控描绘,而非明确设定属性。主控描绘较不易受到项目重新排序的影响。
下面是如何在Better ListView(提供免费和扩展版本的第三方组件)中执行此操作-只需处理一个
DrawItemBackground
事件:实验结果:
sz81bmfz6#
将ListView的OwnerDraw属性设置为true,然后实现DrawItem处理程序。如何在ListView控件中改变行的颜色?