الطريقة الأكثر فعالية لمعرفة ما إذا كان العنصر موجودًا أم لا في عنصر تحكم مربع القائمة

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

سؤال

يستند هذا الطلب إلى MS Access VBA.أود أن أعرف ما هي الطريقة الأكثر فعالية لمعرفة ما إذا كان هناك عنصر موجود في عنصر تحكم مربع القائمة.

هل كانت مفيدة؟

المحلول

فيما يلي نموذج لوظيفة يمكن تكييفها لتناسبها.

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