2013-03-12 143 views
1

在窗体上我有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中的单元格或整行的背景颜色,而无需将焦点移动到该网格?

回答

0

到目前为止,我无法找到问题本身的解决方案。

我创建一个变通虽然:

我创建包含每个网格的值的枚举:

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

每当电网获取焦点我保存的形式水平变量对应的枚举值。 在第一个网格中着色所需的单元格之后,我将焦点返回到最后一个网格。

用户没有在网格本身进行编辑,而是在放置在单元格上的文本框中进行编辑,因此网格失去焦点并没有真正的问题。

当你仔细观察,虽然你看到焦点离开并很快返回。

现在我会接受这项工作,并发现其小故障。

也许将来我可以想出更好的解决方案,或者其他人有更好的建议?