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 прилага форматиране само към първия SubItem в реда - не всички SubItems, както бих си помислил. Не съм сигурен дали това е умишлено или грешка, или ако кодирам нещо неправилно, но за мен „Елемент“ съответства на целия ред, докато 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, тъй като форматирането на отделни клетки ще замени форматирането на реда.

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