Ein Eintrag in einer Listbox suchen
Hallo,
ich möchte einen bestimmten Eintrag in einer Listbox suchen. Habe eine Menge im Internet gefunden, die auch funktionierten, aber leider entsprichten sie nicht so ganz meinen Vorschriften!
Nehmen wir mal an wir haben 3 Einträge in einer Listbox : 1. Test und 2. Crunkstar & 3. Crunk
Jetzt suche wir Test, es wird ohne probleme gefunden, suche ich Tests, wirds nicht gefunden.
Suche ich Crunkstar wirds gefunden, suche ich Crunk, wird Crunkstar angezeigt! Weil Crunkstar vor Crunk steht! Ich möchte aber eine GANZ genaue Suche....
Folgenden code habe ich für diesen Versuch benutzt:
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As _
String) As Long
Public Const LB_FINDSTRING = &H18F
(Ist in einem Modul, deshalb Public und nicht Private)
Sub find()
Dim ListIndex&
ListIndex = SendMessage(frmMain.usernames.hwnd, LB_FINDSTRING, -1, username)
frmMain.usernames.ListIndex = ListIndex
If ListIndex > -1 Then
checkpw
Else
wrongid
End If
End Sub
Funktioniert nur bei einer Fehlgeschlagende Suche nach meinen Vorstellungen.
Ich hoffe ihr könnt mir weiterhelfen! Ist nähmlich für mich sehr wichtig!
MFG
PL-q
ich möchte einen bestimmten Eintrag in einer Listbox suchen. Habe eine Menge im Internet gefunden, die auch funktionierten, aber leider entsprichten sie nicht so ganz meinen Vorschriften!
Nehmen wir mal an wir haben 3 Einträge in einer Listbox : 1. Test und 2. Crunkstar & 3. Crunk
Jetzt suche wir Test, es wird ohne probleme gefunden, suche ich Tests, wirds nicht gefunden.
Suche ich Crunkstar wirds gefunden, suche ich Crunk, wird Crunkstar angezeigt! Weil Crunkstar vor Crunk steht! Ich möchte aber eine GANZ genaue Suche....
Folgenden code habe ich für diesen Versuch benutzt:
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As _
String) As Long
Public Const LB_FINDSTRING = &H18F
(Ist in einem Modul, deshalb Public und nicht Private)
Sub find()
Dim ListIndex&
ListIndex = SendMessage(frmMain.usernames.hwnd, LB_FINDSTRING, -1, username)
frmMain.usernames.ListIndex = ListIndex
If ListIndex > -1 Then
checkpw
Else
wrongid
End If
End Sub
Funktioniert nur bei einer Fehlgeschlagende Suche nach meinen Vorstellungen.
Ich hoffe ihr könnt mir weiterhelfen! Ist nähmlich für mich sehr wichtig!
MFG
PL-q
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95172
Url: https://administrator.de/contentid/95172
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo PL-q!
Mit dem dritten "SendMessage"-Parameter legst Du fest, ab welchem Index die Suche beginnen soll (siehe http://msdn.microsoft.com/de-de/library/bb775187(en-us,VS.85).aspx ).
Ein Algorithmus könnte so aussehen:
Wenn das erste gefundene Element nicht mit dem Suchstring übereinstimmt, den Index dieser Fundstelle zwischenspeichern (damit keine Endlosschleife daraus wird, wenn der gesuchte Eintrag nicht enthalten ist) und in einer Schleife weiter suchen, wobei jeweils der Index des zuletzt gefundenen Elements als dritter Parameter übergeben wird. Die Schleife sollte enden, wenn Du den richtigen Eintrag hast, oder wenn Du wieder den Index der ersten Suche erhältst (weil der gesuchte Eintrag nicht enthalten ist) ...
Grüße
bastla
Mit dem dritten "SendMessage"-Parameter legst Du fest, ab welchem Index die Suche beginnen soll (siehe http://msdn.microsoft.com/de-de/library/bb775187(en-us,VS.85).aspx ).
Ein Algorithmus könnte so aussehen:
Wenn das erste gefundene Element nicht mit dem Suchstring übereinstimmt, den Index dieser Fundstelle zwischenspeichern (damit keine Endlosschleife daraus wird, wenn der gesuchte Eintrag nicht enthalten ist) und in einer Schleife weiter suchen, wobei jeweils der Index des zuletzt gefundenen Elements als dritter Parameter übergeben wird. Die Schleife sollte enden, wenn Du den richtigen Eintrag hast, oder wenn Du wieder den Index der ersten Suche erhältst (weil der gesuchte Eintrag nicht enthalten ist) ...
Grüße
bastla
Hallo PL-q!
Für die folgenden ListBox-Einträge
Grüße
bastla
Und was muss ich dort so genau ändern? die -1 zu einer 0?
Für die erste Suche: nein, hier beginnst Du mit -1; danach dann anstelle der -1 das jeweilige Ergebnis (Variable "ListIndex") der vorhergehenden Suche ...Für die folgenden ListBox-Einträge
Crunkstar
Test
Noch ein Test
Crunkie
Crunk
weiterer Test
Crunk&müde
müsste das so ablaufen:Test
Noch ein Test
Crunkie
Crunk
weiterer Test
Crunk&müde
Suche ab -1 -> Ergebnis: 0 (Index von "Crunkstar")
Suche ab 0 -> Ergebnis: 3 (Index von "Crunkie")
Suche ab 3 -> Ergebnis: 4 (Index von "Crunk")
keine weitere Suche, da der Begriff gefunden wurde: der Eintrag stimmt mit dem Suchbegriff genau überein (ev beim Vergleichen LCase() verwenden, um Unterschiede durch Groß-/Kleinschreibung auszuschalten)
bastla