ObjectListView - FormatRow事件不适用于ForeColor

时间:2014-08-14 12:22:11

标签: vb.net formatting row objectlistview

我正在尝试使用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。

也许我做错了什么?或者错过了什么?

1 个答案:

答案 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事件,因为单个单元格格式将覆盖行格式。

相关问题