我正在尝试使用 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 应用格式 - 而不是我想象的所有 SubItem。不确定这是故意的还是错误,或者我是否编码不正确,但对我来说,“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 事件,因为单个单元格格式设置将覆盖行格式设置。
关于vb.net - ObjectListView - FormatRow 事件不适用于 ForeColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307988/