2013-03-12 2 views
1

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

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

Данные, которые используются для заполнения верхней сетки принимается посредством управления 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, не перемещая фокус на эту сетку?

ответ

0

До сих пор я не мог найти решение самой проблемы.

Я создал работу вокруг, хотя:

Я создал перечисление, содержащее значение для каждой сетки:

Public Enum ActiveGrid 
    enuSystem = 0 
    enuTel = 1 
    enuRLN = 2 
    enuRood = 3 
    enuData = 4 
    enuCircuit = 5 
End Enum 

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

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

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

На данный момент я приму эту работу и ее незначительные сбои.

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

Смежные вопросы