我正在尝试使用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
似乎只将行中的第一个项目设置为指定的颜色,并且每个其他SubItem都使用默认颜色绘制。
如果我将代码更改为:
e.Item.BackColor = Color.FromArgb(252, 146, 156)
然后它正确地将整行绘制为背景颜色。它似乎不适用于ForeColor。
也许我做错了什么?或者错过了什么?
答案 0 :(得分:3)
好的,事实证明,e.Item.ForeColor似乎只是将格式应用于行中的第一个SubItem - 并非所有SubItems都像我想的那样。不确定这是故意还是错误,或者我编码错误,但对我来说'Item'对应于整行,而SubItem对应于单个单元格。
无论如何,为了解决我的问题,我将代码修改为以下内容:
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事件,因为单个单元格格式将覆盖行格式。