Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0057: ListBox mit API schneller durchsuchen

 von 

Beschreibung 

Oft stellt sich das Problem, daß in einer mit vielen Argumenten gefüllten Listbox ein Element gesucht werden muß. Will man dies von VB aus lösen, bleibt nichts anderes übrig, als die Liste Position fü rPosition zu durchsuchen. Die hier vorgestellte Api macht das zwar auf die gleiche Weise, nur wesentlich schneller.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [2,04 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Textfeld "Text1"

Option Explicit

Private 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
        
Private Const LB_FINDSTRING = &H18F

Private Sub FillList()
  Dim Char$, AA$, X%, Y%
   Randomize
   List1.Clear
   For Y = 1 To 4000
     AA = ""
     For X = 1 To 4
       Char = Chr$(Int(26 * Rnd) + 65)
       AA = AA & Char
     Next X
     List1.AddItem AA
   Next Y
End Sub

Private Sub Form_Load()
  Form1.Show
  Text1.Text = "Bitte warten, Liste wird gefüllt"
  DoEvents
  Call FillList
  Text1.Text = ""
End Sub

Private Sub Text1_Change()
  Dim ListIndex&
    ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, Text1.Text)
    List1.ListIndex = ListIndex
    If ListIndex > -1 Then List1.TopIndex = ListIndex
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 5 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Agent J am 23.02.2006 um 10:17

@Andrej

Die Replace Funktion ist in VB5 noch nicht Enthalten,
auf http://www.vb-tec.de/replace.htm gibt es aber eine
ersatz funktion die außerdem viel schneller als die VB6
eigene ist.

Kommentar von AGKD am 24.01.2006 um 16:34

Hallo!
ich bin ein richtiger Anfänger bei VB aber Tipp 0057: ListBox mit API schneller durchsuchen ist genau die Lösung des Problems, die ich lange danach suche.
Die Frage ist nur, wie kann ich die geschriebenen Skripte oder Makros verwenden? Was brauche ich bei mir auf dem Rechner zu installieren. Ich habe nämlich kein VB auf Rechner.
Anhand eines Beispiels, wo schrittweise erklärt wird, was man tun soll, wäre für mich ideal!
Vielen Dank für die Infos und Hilfe im Voraus!
Gruß
Ali

Kommentar von Andrej am 09.08.2005 um 09:42

Hallo Leute,
dieses Prog. ist genau das, was ich schon lange suche. Das Problem aber ist, dass ich VB5 habe. Bei mir erkennt er den Befehl "Replace" nicht.
Ich bitte um Hilfe
Mfg Abdrej

Kommentar von Andre am 28.08.2001 um 15:40

Kann man auch nach einem bestimmten ItemData wert suchen lassen?
Danke im voraus!

Kommentar von Mirko Klotz am 14.12.2000 um 11:23

Man kann statt ListBoxen mit der gleichen Technik auch ComboBoxen durchsuchen. Statt der Konstanten LB_FINDSTRING = &H18F ist dafür lediglich die Konstante CB_FINDSTRING = &H14C beim Aufruf von SendMessage zu verwenden.