当列表很长时,VB6 列表循环不起作用
VB6 list loop not working when list is very long
如何使 VB6 列表计数适用于超过 32767 个项目的列表?
for k = 0 to List2.ListCount - 1
''do stuff
next
上面的代码工作得很好,直到我的列表中的项目太多,然后列表计数变得一团糟并变为负数。
我该如何解决这个问题?我可以将 ListCount 设为 long 数据类型吗?
尽管 VB6 属性仅带符号 Integer
底层控件使用 32 位整数,因此您可以使用 Windows API 来操作您的列表:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const LB_GETCOUNT = &H18B
Private Const LB_GETTEXT = &H189
Private Sub Command1_Click()
Dim ix As Long
For ix = 0 To 40000
List1.AddItem "X" + Format(ix)
Next
End Sub
Private Sub Command2_Click()
Dim rc As Long
Dim wp As Long
Dim lp As Long
Dim s As String * 1000
' Get count of items into rc
rc = SendMessage(List1.hwnd, LB_GETCOUNT, 0, 0)
' Get the 39001th item
rc = SendMessageString(List1.hwnd, LB_GETTEXT, 39000, s)
MsgBox s
End Sub
话虽如此,切换到 ListView 可能仍然是个好主意。
如何使 VB6 列表计数适用于超过 32767 个项目的列表?
for k = 0 to List2.ListCount - 1
''do stuff
next
上面的代码工作得很好,直到我的列表中的项目太多,然后列表计数变得一团糟并变为负数。
我该如何解决这个问题?我可以将 ListCount 设为 long 数据类型吗?
尽管 VB6 属性仅带符号 Integer
底层控件使用 32 位整数,因此您可以使用 Windows API 来操作您的列表:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const LB_GETCOUNT = &H18B
Private Const LB_GETTEXT = &H189
Private Sub Command1_Click()
Dim ix As Long
For ix = 0 To 40000
List1.AddItem "X" + Format(ix)
Next
End Sub
Private Sub Command2_Click()
Dim rc As Long
Dim wp As Long
Dim lp As Long
Dim s As String * 1000
' Get count of items into rc
rc = SendMessage(List1.hwnd, LB_GETCOUNT, 0, 0)
' Get the 39001th item
rc = SendMessageString(List1.hwnd, LB_GETTEXT, 39000, s)
MsgBox s
End Sub
话虽如此,切换到 ListView 可能仍然是个好主意。