在表格上我有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 :(得分:0)
到目前为止,我找不到问题本身的解决方案。
我创作了一部作品:
我创建了一个包含每个网格值的枚举:
Public Enum ActiveGrid
enuSystem = 0
enuTel = 1
enuRLN = 2
enuRood = 3
enuData = 4
enuCircuit = 5
End Enum
每当网格获得焦点时,我将相应的枚举值保存在表单级变量中。 在第一个网格中对所需单元格着色后,我将焦点返回到最后一个网格。
用户不是在网格本身进行编辑,而是在放置在单元格上的文本框中进行编辑,因此网格没有丢失焦点的真正问题。
当你仔细观察时,你会看到焦点离开并快速返回。
现在我将接受这项工作,以及它的小故障。
也许将来我可以提出更好的解决方案,或者其他人有更好的建议?