ObjectListView — событие FormatRow не работает для ForeColor

Я пытаюсь отформатировать строку в ObjectListView с помощью события FormatRow и установить для всей строки другой 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

Кажется, что первый элемент в строке имеет указанный цвет, а все остальные подэлементы окрашены в цвет по умолчанию.

Если я изменю свой код на:

e.Item.BackColor = Color.FromArgb(252, 146, 156)

Затем он правильно закрашивает всю строку как фоновый цвет. Это просто не работает для ForeColor.

Может я что-то не так делаю? Или может что-то пропустил?


person Riples    schedule 14.08.2014    source источник


Ответы (1)


Итак, получается, что e.Item.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
        For Each sb As OLVListSubItem In e.Item.SubItems
            sb.ForeColor = Color.FromArgb(252, 146, 159)
        Next
    End If
End Sub

Теперь это дает мне требуемые результаты, а также хорошо работает с событием FormatCell, поскольку форматирование отдельных ячеек переопределяет форматирование строк.

person Riples    schedule 16.08.2014
comment
Я тоже пошел по этому пути. Моей первой мыслью было установить для args.Item.UseItemStyleForSubItems значение true, но это исходное свойство ListViewItem и, похоже, не влияет на OLV. - person Rev; 19.08.2014
comment
Похоже, это может быть ошибка, но есть несколько способов ее обойти... ссылка - person Riples; 19.08.2014