Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0471: Doppelte Einträge aus ListBoxen entfernen

 von 

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:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,5 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 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-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 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