Rubrik: Controls · ListBox | VB-Versionen: VB6 | 12.12.06 |
ListBox-Einträge blitzschnell neu sortieren Sortiert die Einträge einer ListBox neu (nur 0,2 Sekunden für 1.000 Einträge) | ||
Autor: Andreas Dirscherl | Bewertung: | Views: 40.768 |
www.andreas-dirscherl.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Die Einträge einer ListBox lassen sich ganz einfach sortieren, indem die Eigenschaft Sorted zur Entwicklungszeit auf True gesetzt wird.
Was aber, wenn der Benutzer entscheiden soll, wann die Einträge sortiert werden sollen? Einfach während der Laufzeit die Eigenschaft Sorted auf True setzen ist nicht möglich.
Mit nachfolgender Prozedur lässt sich eine ListBox blitzschnell sortieren. Für 1.000 Einträge benötigt der Code nur etwa 0,2 Sekunden.
' ListBox neu sortieren Public Function Liste_Sortieren(Liste As ListBox) Dim i As Long Dim x As Long Dim TMP As String Dim ARR() As String Dim bAdd As Boolean Dim nCount As Long ' alle Einträge in einen String speichern For i = 0 To Liste.ListCount - 1 TMP = TMP & Liste.List(i) & "¦¦" Next i If Len(TMP) > 0 Then TMP = Left$(TMP, Len(TMP) - 2) ' String splitten ARR() = Split(TMP, "¦¦") With Liste ' Liste löschen .Clear ' macht das Ganze noch etwas schneller .Visible = False ' alle Einträge des Arrays durchlaufen und ' sortiert in die ListBox schreiben nCount = UBound(ARR) For i = 0 To nCount bAdd = True For x = 0 To .ListCount - 1 If .List(x) > ARR(i) Then .AddItem ARR(i), x bAdd = False: Exit For End If Next x If bAdd Then .AddItem ARR(i) Next i ' Listendarstellung wieder einschalten .Visible = True End With End Function
Die Funktion kann wie folgt aufgerufen werden:
Private Sub cmdSortieren_Click() Call Liste_Sortieren(List1) End Sub
Es ist natürlich auch möglich, viel mehr Einträge zu sortieren.
(Bei 1.000.000 Einträge hat sich dann mein VB kurzzeitig verabschiedet ^^ )
Viel Spaß beim Sortieren!