Наиболее эффективный способ узнать, есть элемент в элементе управления listbox или его нет

StackOverflow https://stackoverflow.com/questions/105935

Вопрос

Этот запрос основан на MS Access VBA.Я хотел бы знать, каков наиболее эффективный способ проверить, существует ли элемент в элементе управления listbox.

Это было полезно?

Решение

Вот пример функции, которая может быть адаптирована под вас.

Function CheckForItem(strItem, ListB As ListBox) As Boolean
Dim rs As DAO.Recordset
Dim db As Database
Dim tdf As TableDef

    Set db = CurrentDb

    CheckForItem = False

    Select Case ListB.RowSourceType
        Case "Value List"
            CheckForItem = InStr(ListB.RowSource, strItem) > 0

        Case "Table/Query"
            Set rs = db.OpenRecordset(ListB.RowSource)

            For i = 0 To rs.Fields.Count - 1
                strList = strList & " & "","" & " & rs.Fields(i).Name
            Next

            rs.FindFirst "Instr(" & Mid(strList, 10) & ",'" & strItem & "')>0"

            If Not rs.EOF Then CheckForItem = True

        Case "Field List"

            Set tdf = db.TableDefs(ListB.RowSource)

            For Each itm In tdf.Fields
                If itm.Name = strItem Then CheckForItem = True
            Next

    End Select

End Function

Другие советы

К сожалению, нет более эффективного способа, чем линейный поиск, если только вы не знаете, что ваш список отсортирован или проиндексирован каким-то определенным образом.

For i = 1 To TheComboBoxControl.ListCount
  if TheComboBoxControl.ItemData(i) = "Item to search for" Then do_something()
Next i

Если вы не возражаете прибегнуть к 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 Const LB_FINDSTRINGEXACT = &H1A2

Dim index as Integer
Dim searchString as String
searchString = "Target" & Chr(0)

index = SendMessage(ListBox1.hWnd, LB_FINDSTRINGEXACT , -1, searchString)

Который должен возвращать индекс строки, содержащей целевую строку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top