1

フォームには4つのMSFlexGridがあります。

上のグリッドには動的データが含まれており、時々更新されます。ユーザーは、他の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 に答える