VB6:如何使用API搜索列表框并获取所有匹配项?

VB6:如何使用API搜索列表框并获取所有匹配项?,vb6,Vb6,我有一个包含几千个项目的列表框。下面的代码由work perfect提供,如果我想获得第一个匹配。但有时我有多个数据相同的项目。那么,我想得到所有的比赛,怎么做 哦,实际上是这样的: aa4 十二烷基硫酸钠 aa5 aa6 fdf dsf 从列表中,我想得到以“aa”开头的项目的索引 您可以利用以下事实:wParamfor and messages允许调用者指定要搜索的第一项: wParam 要搜索的第一个项之前的项的从零开始的索引。当搜索到达列表框的底部时,它将继续从列表框的顶部搜索到wPar

我有一个包含几千个项目的列表框。下面的代码由work perfect提供,如果我想获得第一个匹配。但有时我有多个数据相同的项目。那么,我想得到所有的比赛,怎么做

哦,实际上是这样的: aa4 十二烷基硫酸钠 aa5 aa6 fdf dsf

从列表中,我想得到以“aa”开头的项目的索引


您可以利用以下事实:
wParam
for and messages允许调用者指定要搜索的第一项:

wParam

要搜索的第一个项之前的项的从零开始的索引。当搜索到达列表框的底部时,它将继续从列表框的顶部搜索到wParam参数指定的项。如果wParam为–1,则从开始搜索整个列表框

因此,您的
GetListBoxIndex
采用以下形式(注意
StartIndex
参数而不是硬编码的
-1
):

其余的取决于您打算在之后如何处理结果。下面是只将结果打印到即时窗口的简单测试:

Private Sub Command1_Click()
    PrintAllMatches List1.hWnd, Text1.Text
End Sub

Private Sub Form_Load()
    List1.AddItem "aa1"
    List1.AddItem "bbb"
    List1.AddItem "aa2"
End Sub

Private Sub PrintAllMatches(hWnd As Long, SearchKey As String)
    Dim firstMatch As Long, nextMatch As Long
    nextMatch = GetListBoxIndex(hWnd, SearchKey, -1, False)
    If nextMatch = LB_ERR Then
        Debug.Print "Not found"
        Exit Sub
    End If

    firstMatch = nextMatch
    Do
        Debug.Print "Match is at index " & nextMatch
        nextMatch = GetListBoxIndex(hWnd, SearchKey, nextMatch, False)
    Loop While nextMatch <> firstMatch
End Sub
Private子命令1_Click()
PrintAllMatches List1.hWnd,Text1.Text
端接头
专用子表单_加载()
列表1.AddItem“aa1”
列表1.AddItem“bbb”
列表1.AddItem“aa2”
端接头
私有子PrintAllMatches(hWnd为长,SearchKey为字符串)
第一场比赛尽可能长,下一场比赛尽可能长
nextMatch=GetListBoxIndex(hWnd,SearchKey,-1,False)
如果nextMatch=LB_ERR,则
调试。打印“未找到”
出口接头
如果结束
firstMatch=nextMatch
做
调试。打印“匹配在索引处”&下一个匹配
nextMatch=GetListBoxIndex(hWnd、SearchKey、nextMatch、False)
下一次比赛第一场比赛时循环
端接头

您可以利用以下事实:和消息的
wParam允许调用者指定要搜索的第一项:

wParam

要搜索的第一个项之前的项的从零开始的索引。当搜索到达列表框的底部时,它将继续从列表框的顶部搜索到wParam参数指定的项。如果wParam为–1,则从开始搜索整个列表框

因此,您的
GetListBoxIndex
采用以下形式(注意
StartIndex
参数而不是硬编码的
-1
):

其余的取决于您打算在之后如何处理结果。下面是只将结果打印到即时窗口的简单测试:

Private Sub Command1_Click()
    PrintAllMatches List1.hWnd, Text1.Text
End Sub

Private Sub Form_Load()
    List1.AddItem "aa1"
    List1.AddItem "bbb"
    List1.AddItem "aa2"
End Sub

Private Sub PrintAllMatches(hWnd As Long, SearchKey As String)
    Dim firstMatch As Long, nextMatch As Long
    nextMatch = GetListBoxIndex(hWnd, SearchKey, -1, False)
    If nextMatch = LB_ERR Then
        Debug.Print "Not found"
        Exit Sub
    End If

    firstMatch = nextMatch
    Do
        Debug.Print "Match is at index " & nextMatch
        nextMatch = GetListBoxIndex(hWnd, SearchKey, nextMatch, False)
    Loop While nextMatch <> firstMatch
End Sub
Private子命令1_Click()
PrintAllMatches List1.hWnd,Text1.Text
端接头
专用子表单_加载()
列表1.AddItem“aa1”
列表1.AddItem“bbb”
列表1.AddItem“aa2”
端接头
私有子PrintAllMatches(hWnd为长,SearchKey为字符串)
第一场比赛尽可能长,下一场比赛尽可能长
nextMatch=GetListBoxIndex(hWnd,SearchKey,-1,False)
如果nextMatch=LB_ERR,则
调试。打印“未找到”
出口接头
如果结束
firstMatch=nextMatch
做
调试。打印“匹配在索引处”&下一个匹配
nextMatch=GetListBoxIndex(hWnd、SearchKey、nextMatch、False)
下一次比赛第一场比赛时循环
端接头

我有类似的例子,比如如何解决下面的代码

Adodc1.Recordset.MoveFirst Adodc1.Recordset.Find "DEBTOR_CODE = '" & Text11.Text & "'" If Adodc1.Recordset.EOF = True Or Adodc1.Recordset.BOF = True Then MsgBox "Record Not Found!", vbApplicationModal Adodc1.Recordset.MoveFirst Me.Combo1.SetFocus Me.Combo1.ListIndex = Me.Text11.Text End If

我必须搜索债务人代码,每个债务人都有多个地址,我需要在一个组合框中得到多个答案

我有类似的情况,比如如何解决以下代码

Adodc1.Recordset.MoveFirst Adodc1.Recordset.Find "DEBTOR_CODE = '" & Text11.Text & "'" If Adodc1.Recordset.EOF = True Or Adodc1.Recordset.BOF = True Then MsgBox "Record Not Found!", vbApplicationModal Adodc1.Recordset.MoveFirst Me.Combo1.SetFocus Me.Combo1.ListIndex = Me.Text11.Text End If

我必须搜索债务人代码,每个债务人都有多个地址,我需要在组合框中得到多个答案,只是出于好奇,为什么列表框中会有那么多项目?listbox用于向用户显示他们可以选择的选项,滚动数千个选项似乎是一个非常漫长的过程。(在第一个位置允许重复似乎也不是一个明智的UI决定,因为如果有两个相同的项供他们选择,你就无法分辨他们选择哪一个,如果你不需要区分它们,那么你就不需要在第一个位置同时显示它们。)是的,listbox对于太多的项来说太糟糕了,但自从我使用vb6以来,我还没有找到任何其他解决方案。我想知道是否有替代ListBox的方法你仍然没有回答他的问题。列表框用于用户界面。为什么你的列表框中需要数千个项目?是的,我想要用户界面:)顺便说一句,它并不总是以千为单位,有时可能是以100为单位。列表计数取决于用户输入,它在一个巨大的数据库中执行排列和搜索。顺便说一句,@Ken,很抱歉回答错误+迟到:(只是出于好奇,为什么列表框中会有这么多的项目?列表框是用来向用户显示选项的,用户可以选择,滚动数千个选项似乎是一个非常漫长的过程。(在第一个位置允许重复似乎也不是一个明智的UI决定,因为如果你有两个相同的选项供他们选择,你就无法分辨他们选择哪一个,如果你不需要区分它们,那么你就不需要在第一个位置同时显示它们。)嗯,是的,listbox对于太多的项目来说太糟糕了,但我没有找到任何其他解决方案,因为我使用的是vb6。我想知道是否有替代listbox的方法。您仍然没有回答他的问题。listbox是用于用户界面的。为什么您的listbox中需要数千个项目?是的,我想要用户界面:)顺便说一句,它并不总是以千为单位,有时可能是100秒。列表计数取决于用户输入,它在一个巨大的数据库中执行排列和搜索。顺便说一句,@Ken,很抱歉回答错误+迟到:(