Изменить цвет фона ячейки без изменения фокуса
На форме у меня 4 MSFlexGrids.
Верхняя сетка содержит динамические данные, которые обновляются время от времени. Пользователь может вводить данные в ячейки 3 других сеток.
Данные, которые используются для заполнения верхней сетки, принимаются через элемент управления Winsock, обрабатываются, а затем результаты записываются в соответствующие ячейки с помощью .TextMatrix(intRow, intCol) = strData
Это отлично работает. Данные обновляются безупречно, и пользователь может ввести свои данные в другие 3 сетки без каких-либо проблем.
Проблема возникает, когда я хочу изменить цвет фона некоторых ячеек в верхней сетке. В редких случаях полученные данные очень важны, и цвет фона соответствующих ячеек должен изменить цвет.
Я изменяю цвет ячеек с помощью следующего кода:
With grd
For lngRow = 1 To .Rows - 1
'default background color
lngBack = vbWhite
'check for important values
If Val(.TextMatrix(lngRow, 1)) >= lngMax Then
'important color
lngBack = &H3040FF
End If
'select whole row
.Row = lngRow
.Col = 0
.RowSel = lngRow
.ColSel = .Cols - 1
'set the background color of the selected row
.CellBackColor = lngBack
Next lngRow
End With 'grd
Проблема в том, что когда пользователь вводит данные в другие 3 сетки, а цвет фона строки в верхней сетке изменяется, то фокус перемещается в верхнюю сетку, и пользователь должен заново вводить свои данные в сетке, где он работал.
Можно ли изменить цвет фона ячейки или всей строки в MSFlexGrid, не перемещая фокус на эту сетку?
1 ответ
Пока я не смог найти решение самой проблемы.
Я создал работу, хотя:
Я создал перечисление, содержащее значение для каждой сетки:
Public Enum ActiveGrid
enuSystem = 0
enuTel = 1
enuRLN = 2
enuRood = 3
enuData = 4
enuCircuit = 5
End Enum
Всякий раз, когда сетка получает фокус, я сохраняю соответствующее значение перечисления в переменной уровня формы. После окрашивания необходимых ячеек в первой сетке я возвращаю фокус в сетку, которая была последней.
Пользователь редактирует не в самой сетке, а в текстовом поле, которое расположено над ячейкой, поэтому нет реальной проблемы с сеткой, теряющей фокус.
Когда вы смотрите внимательно, вы видите, что фокус исчезает и быстро возвращается.
Пока я приму эту работу вокруг, и ее незначительные глюки.
Может быть, в будущем я смогу найти лучшее решение, или у кого-то еще есть лучшее предложение?