Loading... 在阶段项目中,有些同学的项目中使用了大量的ListView控件,现在想要实现隔行变色的效果,我们该如何实现? 首先,需要将ListView控件的`OwnerDraw`设置为true,然后分别编写两个事件`DrawColumnHeader`和`DrawSubItem` 为了简化相关操作,我们可以编写一个方法 ```csharp /// <summary> /// 隔行变色 /// </summary> /// <param name="listView">需要隔行变色的ListView控件名称</param> private void ChangeListViewColor(ListView listView) { listView.OwnerDraw = true; listView.DrawColumnHeader += ListView_DrawColumnHeader; //动态创建绘制列标题事件 listView.DrawSubItem += ListView_DrawSubItem; //动态创建绘制行事件 } /// <summary> /// 绘制列标题 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) { e.DrawText(TextFormatFlags.Default); } /// <summary> /// 绘制隔行变色行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) { if (e.Item.Selected) { //选中时的颜色 e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(199, 223, 113)), e.Bounds); } else { //其他行执行隔行变色 if(e.ItemIndex % 2 == 0) e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(236, 244, 239)), e.Bounds); else e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(255, 255, 255)), e.Bounds); } e.DrawText(TextFormatFlags.Default); } ``` 编写结束后,我们直接调用该方法:`ChangeListViewColor(需要隔行变色的ListView控件名称);` 最后修改:2022 年 07 月 16 日 © 允许规范转载 赞 6 都滑到这里了,不点赞再走!?