我用一个ListView显示20个字段的值,在鼠标选择了ListView的某行后,将该行各列的文本分别传递给多个CombBox和TextBox的,其中存在一个问题很让人难受:
单击ListView某行的时候,感觉整个程序都有迟滞感,很不舒服,这有什么好的解决方法吗?代码如下:Private Sub Form_Load() '窗体初始化
   '设置LiseView1的列标题
    With LiseView1
       LiseView1.ColumnHeaders.Add = "编号"
                    ......
                    ......
                    ......
       LiseView1.ColumnHeaders.Add = "第五地址"
    End With
    Call AddInfo '初始化Lv显示数据
End Sub
Public Sub AddInfo()
    Call OpenConn
    rs.Open "select * from Custom", cn, 1, 1
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        Do While Not rs.EOF
            Dim addlv As ListItem
            With addlv
                Set addlv = LiseView1.ListItems.Add(, , rs.Fields("CstID")) '绑定数据
                       addlv.SubItems(1) = rs.Fields("CstName") & ""
                    ......
                    ......
                    ......
                    addlv.SubItems(19) = rs.Fields("CstAddr5") & ""
                    rs.MoveNext
            End With
        Loop
    Call CloseConn
    End If
End Sub
下面这个过程即使用逐个传值而不用数组,也一样有迟滞感
Private Sub TxAdd()
    Dim i As Long, j As Long
    Dim m As Long, n As Long
    For i = 1 To ListView1.ListItems.Count
        If ListView1.ListItems(i).Selected Then
            TextBox(0).Text = ListView1.ListItems(i).Text
            For j = 1 To 7
                TextBox(j).Text = ListView1.ListItems.Item(i).SubItems(j)
            Next
            For m = 0 To 7
                n = m + 8
                ComboBox(m).Text = ListView1.ListItems.Item(i).SubItems(n)
            Next
        End If
    Next
End SubPrivate Sub ListView_ItemClick(ByVal Item As MSComctlLib.ListItem)
    TxAdd
    Btn(1).Enabled = True                         
    Btn(5).Enabled = True                          
End Sub

解决方案 »

  1.   

    填充之前刷新为假,完了之后再刷新LiseView为真
      

  2.   

    问题出在这里:Private Sub TxAdd()
        Dim i As Long, j As Long
        Dim m As Long, n As Long
        For i = 1 To ListView1.ListItems.Count
            If ListView1.ListItems(i).Selected Then
                TextBox(0).Text = ListView1.ListItems(i).Text
                For j = 1 To 7
                    TextBox(j).Text = ListView1.ListItems.Item(i).SubItems(j)
                Next
                For m = 0 To 7
                    n = m + 8
                    ComboBox(m).Text = ListView1.ListItems.Item(i).SubItems(n)
                Next
            End If
        Next
    End Sub在这个过程中,系统要不停循环判断点击的是哪一行,而ListView1.ListItems.Count太大,所以导致速度变慢。我把数据库删了4000条,现在还有4000条,
    迟滞感不严重了,但是不可能用删除数据的方法来做啊,谁有好办法吗?请教教我,谢谢!
      

  3.   

    Private Sub TxAdd()
        Dim i As Long, j As Long
        Dim m As Long, n As Long
        For i = 1 To ListView1.ListItems.Count
            If ListView1.ListItems(i).Selected Then
                TextBox(0).Text = ListView1.ListItems(i).Text
                For j = 1 To 7
                    TextBox(j).Text = ListView1.ListItems.Item(i).SubItems(j)
                Next
                For m = 0 To 7
                    n = m + 8
                    ComboBox(m).Text = ListView1.ListItems.Item(i).SubItems(n)
                Next
                
                exit for   '加这个会快点
            End If
        Next
    End Sub
      

  4.   


    Private Sub TxAdd()
        Dim i As Long, j As Long
        Dim m As Long, n As Long
        Dim Node As MSComctlLib.Node
        If Not TreeView1.SelectedItem = Nothing Then
            Set Node = TreeView1.SelectedItem
    '    For i = 1 To ListView1.ListItems.Count
            TextBox(0).Text = Node.Text
            For j = 1 To 7
                TextBox(j).Text = Node.SubItems(j)
            Next
            For m = 0 To 7
                n = m + 8
                ComboBox(m).Text = Node.SubItems(n)
            Next
    '    Next
        End If
    End Sub
      

  5.   


    Private Sub TxAdd()
        Dim i As Long, j As Long
        Dim m As Long, n As Long
        For i = 1 To ListView1.ListItems.Count
            If ListView1.ListItems(i).Selected Then
                TextBox(0).Text = ListView1.ListItems(i).Text
                For j = 1 To 7
                    TextBox(j).Text = ListView1.ListItems.Item(i).SubItems(j)
                Next
                For m = 0 To 7
                    n = m + 8
                    ComboBox(m).Text = ListView1.ListItems.Item(i).SubItems(n)
                Next            
            End If
        exit for   '加这个会快点
        Next
    End Sub我试了一下确实如此,改了一下,加到最外面的这个FOR更快,谢谢!不过还有个BUG:当单击的行越靠后,速度越慢,难道要用ListView分页才能有所改善?
      

  6.   

    最新结果:使用两次Exit For更快,这会有什么问题吗?
    Private Sub TxAdd()
        Dim i As Long, j As Long
        Dim m As Long, n As Long
        For i = 1 To CstLv.ListItems.Count
            If CstLv.ListItems(i).Selected Then
                CITx(0).Text = CstLv.ListItems(i).Text '客户编号
                For j = 1 To 7
                    CITx(j).Text = CstLv.ListItems.Item(i).SubItems(j)
                Next
                For m = 0 To 7
                    n = m + 8
                    CIComb(m).Text = CstLv.ListItems.Item(i).SubItems(n)
                Next
                Exit For
            End If
        Exit For
        Next
    End Sub
      

  7.   

    你那样加还要循环做什么???不明白修正一下If Not TreeView1.SelectedItem is Nothing Then 
      

  8.   

    想在一个界面上实现所有业务操作,尽量符合用户的原有使用习惯,降低部署时间和难度。这个软件使用的行业操作非常频繁,用户双手基本没有休息,所以
    不希望让他们在这里点那里点浪费时间。如果是用鼠标滚轮来控制ListView的数据进行动态填充就好了,可惜我还不会。