我用一个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
单击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
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条,
迟滞感不严重了,但是不可能用删除数据的方法来做啊,谁有好办法吗?请教教我,谢谢!
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
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
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分页才能有所改善?
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
不希望让他们在这里点那里点浪费时间。如果是用鼠标滚轮来控制ListView的数据进行动态填充就好了,可惜我还不会。