更改单元格背景颜色而不更改焦点
问题描述:
在窗体上我有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中的单元格或整行的背景颜色,而无需将焦点移动到该网格?
答
到目前为止,我无法找到问题本身的解决方案。
我创建一个变通虽然:
我创建包含每个网格的值的枚举:
Public Enum ActiveGrid
enuSystem = 0
enuTel = 1
enuRLN = 2
enuRood = 3
enuData = 4
enuCircuit = 5
End Enum
每当电网获取焦点我保存的形式水平变量对应的枚举值。 在第一个网格中着色所需的单元格之后,我将焦点返回到最后一个网格。
用户没有在网格本身进行编辑,而是在放置在单元格上的文本框中进行编辑,因此网格失去焦点并没有真正的问题。
当你仔细观察,虽然你看到焦点离开并很快返回。
现在我会接受这项工作,并发现其小故障。
也许将来我可以想出更好的解决方案,或者其他人有更好的建议?