我正在尝试使用FormatRow事件格式化ObjectListView中的一行,并根据值将整个行设置为不同的ForeColor,但是无济于事。
我的代码:
Private Sub lsv_OpenTickets_FormatRow(sender As Object, e As FormatRowEventArgs) Handles lsv_OpenTickets.FormatRow
Dim tkt As Ticket = DirectCast(e.Model, Ticket)
If tkt.due = "Overdue" Then
e.Item.ForeColor = Color.FromArgb(252, 146, 156)
End If
End Sub
似乎只是将行中的第一个Item设置为指定的颜色,而所有其他SubItem都使用默认颜色绘制。
如果我将代码更改为:
e.Item.BackColor = Color.FromArgb(252, 146, 156)
然后,它将整个行正确地绘制为背景色。它似乎不适用于ForeColor。
也许我做错了什么?还是错过了一些东西?
最佳答案
好的,事实证明,e.Item.ForeColor似乎只对行中的第一个SubItem应用了格式设置-并非所有SubItems都像我想的那样。不知道这是故意的还是错误的,或者我是否编写了错误的代码,但是对我来说,“项目”对应于整行,而“子项目”对应于单个单元格。
无论如何,为了解决我的问题,我将代码修改为以下内容:
Private Sub lsv_OpenTickets_FormatRow(sender As Object, e As FormatRowEventArgs) Handles lsv_OpenTickets.FormatRow
Dim tkt As Ticket = DirectCast(e.Model, Ticket)
If tkt.due = "OVERDUE" Then
For Each sb As OLVListSubItem In e.Item.SubItems
sb.ForeColor = Color.FromArgb(252, 146, 159)
Next
End If
End Sub
现在,这为我提供了所需的结果,并且也与FormatCell事件配合使用,因为单个单元格格式将覆盖行格式。