'以下程式处理Multi-column Selection的问题 Private Sub ProcMultiColSel(ByVal Shift As Integer) Dim i As Long, HaveSel As Boolean Dim SelSt As Long, SelEnd As Long Dim OldRowSel As Long, OldColSel As Long With MSFlexGrid1 OldRowSel = .RowSel: OldColSel = .ColSel If HaveSelEntireCol Then '如果有整行被选取的清况,则计算选取的起始结束行 SelSt = IIf(.Col <= .ColSel, .Col, .ColSel) SelEnd = IIf(.Col > .ColSel, .Col, .ColSel) For i = SelSt To SelEnd ColSelect(i) = True Next .CellBackColor = .BackColorSel If Shift <> vbCtrlMask Then '没有按Ctl键则清除其他Column的Selection Call RefreshCols(SelSt, SelEnd) End If Else HaveSel = False For i = 1 To .Cols - 1 HaveSel = HaveSel Or ColSelect(i) Next If HaveSel Then Call RefreshAll End If End If .RowSel = OldRowSel .ColSel = OldColSel End With End Sub 'Check是否有整行的选取 Private Function HaveSelEntireCol() As Boolean With MSFlexGrid1 If .RowSel = (.Rows - 1) And .Row = 1 Then HaveSelEntireCol = True Else HaveSelEntireCol = False End If End With End Function '清除所有的Selection Private Sub RefreshAll() Dim SaveCol As Long, SaveRow As Long, i As Long With MSFlexGrid1 SaveCol = .Col: SaveRow = .Row .Col = 1: .Row = 1 .ColSel = .Cols - 1: .RowSel = .Rows - 1 MSFlexGrid1.CellBackColor = SaveCellBkColor .Col = SaveCol: .Row = SaveRow .ColSel = SaveCol: .RowSel = SaveRow For i = 1 To .Cols - 1 ColSelect(i) = False Next End With End Sub '清除其他Column的Selection除了columns From Selst to SelEnd外,其他清除 Private Sub RefreshCols(ByVal SelSt As Long, ByVal SelEnd As Long) Dim SaveCol As Long, SaveRow As Long, i As Long With MSFlexGrid1 SaveCol = .Col: SaveRow = .Row For i = 1 To .Cols - 1 If Not (i >= SelSt And i <= SelEnd) And ColSelect(i) Then .Col = i: .Row = 1 .ColSel = i: .RowSel = .Rows - 1 MSFlexGrid1.CellBackColor = SaveCellBkColor ColSelect(i) = False End If Next .Col = SaveCol: .Row = SaveRow .ColSel = SaveCol: .RowSel = SaveRow End With End Sub Private Sub MSFlexGrid1_Scroll() SendKeys "{ESC}" End Sub

评论