2013-03-12 3 views
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에서 해당 격자로 포커스를 이동하지 않고 셀 또는 전체 행의 배경색을 변경할 수 있습니까?

답변

0

지금까지 문제 자체에 대한 해결책을 찾을 수 없었습니다.

나는 비록 일을 주위에 만들어 :

나는 각 격자의 값을 포함하는 열거를 생성 : 그리드 포커스 내가 폼 수준 변수에 해당 열거 값을 저장됩니다 때마다

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

. 첫 번째 그리드에서 필요한 셀을 채색 한 후 마지막으로 그리드에 포커스를 되돌립니다.

사용자가 눈금 자체에서 편집하지 않고 셀 위에 놓인 텍스트 상자에서 눈금을 잃어 버리면 실제 문제가 없습니다.

초점을 잘 보았을 때 초점을두고 빠르게 돌아옵니다.

당분간 나는이 문제와 그 사소한 결함을 인정할 것입니다.

앞으로 더 나은 해결책을 찾거나 다른 사람이 더 좋은 제안을 할 수 있습니까?