2013-03-12 254 views
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中的單元格或整行的背景顏色,而無需將焦點移動到該網格?

回答

0

到目前爲止,我無法找到問題本身的解決方案。

我創建一個變通雖然:

我創建包含每個網格的值的枚舉:

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

每當電網獲取焦點我保存的形式水平變量對應的枚舉值。 在第一個網格中着色所需的單元格之後,我將焦點返回到最後一個網格。

用戶沒有在網格本身進行編輯,而是在放置在單元格上的文本框中進行編輯,因此網格失去焦點並沒有真正的問題。

當你仔細觀察,雖然你看到焦點離開並很快返回。

現在我會接受這項工作,並發現其小故障。

也許將來我可以想出更好的解決方案,或者其他人有更好的建議?