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 中单元格或整行的背景颜色?

4

1 回答 1

0

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

我创建了一个解决方法:

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

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

每当网格获得焦点时,我将相应的枚举值保存在表单级别变量中。在第一个网格中为所需的单元格着色后,我将焦点返回到最后一个网格。

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

当您仔细观察时,尽管您会看到焦点离开并迅速返回。

现在我将接受这项工作,以及它的小故障。

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

于 2013-03-20T06:36:27.043 回答