Работа над настольным приложением и, возможно, глупая проблема, которая до сих пор сводит меня с ума.
У меня есть список, который получает свои строки из динамического источника.
Я пытаюсь изменить основной цвет определенных ячеек в элементе управления, если базовые данные для этой ячейки изменяются на конкретные условия.
Элемент управления также рисуется один раз, прежде чем начинается проверка условия, что означает, что все ячейки начинают окрашиваться одинаковым (белым) цветом.
Кроме того, этот список находится внутри Canvas, а этот Canvas, в свою очередь, находится внутри элемента управления Window.
Этот код проверяет состояние по отношению ко всем строкам в списке:
for each dict as Dictionary in WidgetsDictionary
Dim site as String = dict.Value("Site").StringValue
Dim device as String = dict.Value("Device").StringValue
Dim sensor as String = dict.Value("Sensor").StringValue
for intC as integer = 0 to actualLstBox.ListCount
Dim siteComp as String = actualLstBox.Cell(intC,4)
Dim deviceComp as String = actualLstBox.Cell(intC,0)
Dim sensorComp as String = actualLstBox.Cell(intC,1)
if actualLstBox.Cell(intC,4) = site AND
actualLstBox.Cell(intC,1) = sensor AND
actualLstBox.Cell(intC,0) = device then
actualLstBox.CellTag(intC,2) = RGB(255, 192, 203)
exit For
end
next
next
Где WidgetsDictionary содержит условия, которые мне нужно проверить.
И это работает, если я проверяю CellTags после его запуска, я нахожу их правильно настроенными там, где они должны быть.
Теперь, если после этого кода я позвоню
actualLstBox.Refresh()
Примечание: я знаю, что обновление не оптимально, но мне нужно, чтобы оно срабатывало как можно скорее
Я вижу, как код переходит к событию CellBackgroundPaint ListBox
Там у меня есть это
If (row<me.ListCount ) then
If Me.CellTag(row, column ) <>nil Then
g.ForeColor = me.CellTag(row,column)
g.FillRect(0, 0, g.Width, g.Height)
End If
end
И снова я вижу, что этот код выполняется правильно.
Итак, я ожидаю, что список будет перерисован с правильными ячейками в новом цвете.
Но ничего не меняется, я вижу, что событие CellBackgroundPaint срабатывает после каждого обновления, но конечный результат всегда отображается по умолчанию (белые) цветные ячейки.
Я пытался позвонить, чтобы
- InvalidateCell для определенной ячейки
- Недействительно для всего списка вместо обновления (поскольку вы никогда не знаете)
- Обновить на содержащем холсте
После первого блока кода безрезультатно.
Так что теперь я не знаю, что делать дальше.
Редактировать
Если я заменю обработчик события на
If (row mod 2) = 0 Then
g.ForeColor = RGB(232,235,255)
g.FillRect 0, 0, g.Width, g.Height
End If
if column = 2 then
g.ForeColor = RGB(255,253,208)
g.FillRect 0, 0, g.Width, g.Height
end
Я получаю чередующиеся цвета для строк и всего 3-го столбца другого цвета.
Так что я предполагаю, что проблема в том, что я пытаюсь перекрасить его после первого показа, в этом и заключается проблема.