代码优化解决办法

代码优化MSFlexGrid实现Ctrl+鼠标多选.虽然自己写了一个,但表格中行数较多时,效果不太好.请大家给个方案优

代码优化
MSFlexGrid实现Ctrl+鼠标多选.虽然自己写了一个,但表格中行数较多时,效果不太好.请大家给个方案优化一下哈.

VB code
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)    Dim i As Long, j As Long    If MSFlexGrid1.MouseRow = 0 Then Exit Sub        If Button = 1 Then        If Shift = 2 Then            With MSFlexGrid1                For j = 1 To .Cols - 1                    .Col = j                    If .CellBackColor = &H8000000D Then                        .CellForeColor = &H80000008                        .CellBackColor = &H80000005                         .RowData(.Row) = 0                    Else                        .CellForeColor = &H8000000E                        .CellBackColor = &H8000000D                        .RowData(.Row) = 1                    End If                Next            End With        ElseIf Shift = 1 Then            With MSFlexGrid1                If .Row <= .RowSel Then                    For i = .Row To .RowSel                        .RowData(i) = 1                    Next                Else                    For i = .Row To .RowSel Step -1                        .RowData(i) = 1                    Next                End If                           End With        End If    End IfEnd SubPrivate Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)    Dim i As Long, j As Long    Dim lngRow As Long, lngRowSel As Long    If MSFlexGrid1.MouseRow = 0 Then Exit Sub        DoEvents    If Shift = 0 Then        With MSFlexGrid1            lngRow = .Row            lngRowSel = .RowSel            For i = 1 To .Rows - 1                If i <> lngRowSel And .RowData(i) = 1 Then                    .Row = i                    For j = 1 To .Cols - 1                        .Col = j                        .CellForeColor = &H80000008                        .CellBackColor = &H80000005                    Next                                                            .RowData(i) = 0                End If            Next                        .Row = lngRow                        If .Row <= lngRowSel Then                For i = lngRow To lngRowSel                    .Row = i                    .RowData(i) = 1                                        For j = 1 To .Cols - 1                        .Col = j                        .CellForeColor = &H8000000E                        .CellBackColor = &H8000000D                    Next                Next            Else                For i = lngRow To lngRowSel Step -1                    .Row = i                    .RowData(i) = 1                                        For j = 1 To .Cols - 1                        .Col = j                        .CellForeColor = &H8000000E                        .CellBackColor = &H8000000D                    Next                Next            End If            End With    End IfEnd Sub


[解决办法]

[解决办法]
可以不用循环。
[解决办法]
思路换一下
MSFlexGrid1.row 是选中的行
ctrl 之后 选中的行 不停增多

[解决办法]
MSFlexGrid1.Redraw = False
.
.
.
MSFlexGrid1.Redraw = True

[解决办法]
顶楼上
用Redraw属性基本上就没问题了

还有就是既然使用RowData属性标记了选中行,就没必要把所有行都刷新一遍颜色
完全可以在Scroll事件中只把显示出来的几行刷新一下

以前做过一个程序,需要对Msflexgrid隔行变色,就用了Scroll事件,很好用。

------解决方案--------------------




[解决办法]

探讨
顶楼上
用Redraw属性基本上就没问题了

还有就是既然使用RowData属性标记了选中行,就没必要把所有行都刷新一遍颜色
完全可以在Scroll事件中只把显示出来的几行刷新一下

以前做过一个程序,需要对Msflexgrid隔行变色,就用了Scroll事件,很好用。

[解决办法]