VB 5/6-Tipp 0471: Doppelte Einträge aus ListBoxen entfernen
von Benjamin Wilger
Beschreibung
Wird immer wieder gebraucht: Doppelte Einträge sollen aus einer ListBox enrfernt werden. Dieser Code erledigt es ganz einfach und vor allem schnell durch die Benutzung von Arrays als Puffer.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'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 Projekt1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Listen-Steuerelement "List1" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit 'Code von Benjamin Wilger 'Benjamin@ActiveVB.de 'Copyright (C) 2001 Private Sub Command1_Click() Dim i As Long 'Liste leeren List1.Clear 'Zufallsgenerator anwerfen... Randomize '"Zufällige" Anzahl von Einträgen erstellen und ... For i = 0 To Int(Rnd * 3000) '... mit Zufallszahlen füllen List1.AddItem Int(Rnd * 500) Next i Label1.Caption = "Einträge: " & List1.ListCount Command2.Enabled = True End Sub Private Sub Command2_Click() RemoveDoubleEntries List1 Label1.Caption = "Einträge: " & List1.ListCount End Sub Private Sub RemoveDoubleEntries(LBox As ListBox) Dim Entries1() As String, Entries2() As String Dim UB As Long, i As Long, i2 As Long, Found As Boolean Dim DidInit As Boolean 'Array(Datenfeld) auf die erforderliche Größe setzen ReDim Entries1(0 To LBox.ListCount - 1) For i = 0 To LBox.ListCount - 1 'Liste einlesen Entries1(i) = LBox.List(i) Next i For i = 0 To UBound(Entries1) 'Alle Einträge durchgehen 'Flag setzen Found = False 'Alle bereits in die neue Liste eingefügten Einträge durchgehen For i2 = 0 To UB 'Schon Initialisiert? If Not DidInit Then 'Wenn nicht, erst Initialisieren(später) Found = False Exit For ElseIf Entries1(i) = Entries2(i2) Then 'Eintrag in Liste gefunden Found = True Exit For End If Next i2 'Wurde Eintrag in Liste gefunden? If Not Found Then 'Wurde bereits Initialisierung durchgeführt? If Not DidInit Then 'Neue Liste auf erforderliche Größe setzen ReDim Entries2(0 To UBound(Entries1)) DidInit = True End If 'In neue Liste einfügen Entries2(UB) = Entries1(i) 'Zähler hochsetzen. Enthält die Nummer des letzten Eintrags der 'neuen Liste. UB = UB + 1 End If Next i 'Einmal zuviel erhöht UB = UB - 1 ReDim Preserve Entries2(0 To UB) 'Restlichen Elemente abschneiden. 'Liste leeren und mit neuer Liste neu füllen LBox.Clear For i = 0 To UB LBox.AddItem Entries2(i) Next i End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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 1 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 Shredher am 04.10.2004 um 07:07
SUPER!!!
Dieser Tipp ist wirklich sehr hilfreich.
Die Sub "RemoveDoubleEntries" kann ohne Probleme in das eigene Programm eingebunden werden! Nichtmal eine Anpassung ist nötig!
Danke an den Author!
gruß
Shredher