Изменить цвет фона ячейки без изменения фокуса

На форме у меня 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

Всякий раз, когда сетка получает фокус, я сохраняю соответствующее значение перечисления в переменной уровня формы. После окрашивания необходимых ячеек в первой сетке я возвращаю фокус в сетку, которая была последней.

Пользователь редактирует не в самой сетке, а в текстовом поле, которое расположено над ячейкой, поэтому нет реальной проблемы с сеткой, теряющей фокус.

Когда вы смотрите внимательно, вы видите, что фокус исчезает и быстро возвращается.

Пока я приму эту работу вокруг, и ее незначительные глюки.

Может быть, в будущем я смогу найти лучшее решение, или у кого-то еще есть лучшее предложение?

Другие вопросы по тегам