更改单元格背景颜色而不更改焦点

时间:2013-03-12 08:30:02

标签: vb6 cell msflexgrid

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

1 个答案:

答案 0 :(得分:0)

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

我创作了一部作品:

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

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

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

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

当你仔细观察时,你会看到焦点离开并快速返回。

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

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