Listbox doppelte Einträge entfernen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Listbox doppelte Einträge entfernen

    Hallo,

    wie kann ich am besten und am effizientesten* doppelte Einträge aus einer ListBox entfernen?




    über bleiben soll



    Jemand ne Idee?


    * Effizient deshalb, weil ich im Internet auch schon Lösungen mit 50+ Zeilen Code gefunden hab. Das müsste doch auch einfacher gehen?

    Grüße!
    @HeizungAuf5 Ein wenig ausführlicher bitte.
    Was sind das für Datentypen?
    Was stellen die Werte dar?
    Was bedeutet Plus?
    Was gibt es noch?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Was sind das für Datentypen?

    Es handelt sich bei allen Einträgen um Strings.

    RodFromGermany schrieb:

    Was bedeutet Plus?

    Ein Butten, auf dem ein "+" ist :D
    So geht das hinzufügen von Statten

    VB.NET-Quellcode

    1. Dim AktRunde As String
    2. AktRunde = Runde.ToString + ". - " + Zeit
    3. runden.Items.Add(AktRunde)
    4. Runde = Runde + 1


    Auf dem ersten Screenshot sind die Nummerierungen schon entfernt (Macht der "Aufräumcode" ganz am Anfang) damit es auch "gleiche" Werte gibt.

    Grüße!
    Wie wär's mit ner einfachen Überprüfung nach Zeile#2, ob der neue String schon in der Liste vorhanden ist und dann wird das Hinzufügen abgebrochen?

    VB.NET-Quellcode

    1. If runden.Items.Cast(Of String).Contains(AktRunde) Then Exit Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    HeizungAuf5 schrieb:

    RodFromGermany schrieb:

    Was bedeutet Plus?
    Was hat das Drücken des Buttons, auf dem ein "+" ist, mit Deinem Ablauf zu tun?
    Was ist das Ziel des ganzen Ablaufes?
    Warum sollen nicht zwei gleiche Einträge vorhanden sein?
    Wird dem Drücker des Buttons, auf dem ein "+" ist, mitgeteilt, dass sein Drücken verworfen wurde?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    gibt hier zwei ansäte für dein Problem aus meiner sicht.
    Der erste währe folgender:

    etwas zu der Listbox hinzufügen wenn das Bojetz, indemfalle das Item, noch nicht vorhanden ist:

    VB.NET-Quellcode

    1. If ListBox1.Items.Contains(<dein Item>) Then
    2. Else
    3. ListBox1.Items.Add(<dein Item>)
    4. End If


    Der andere ist, die Listboxeinträge zu verleigen ob das Item doppelt vorhanden ist und dann zu entfernen:

    VB.NET-Quellcode

    1. ​For i As Integer = ListBox1.Items.Count - 1 To 1 Step -1
    2. If ListBox1.Items(i).ToString = ListBox1.Items(i - 1).ToString Then ListBox1.Items.Remove(i)
    3. Next
    Dein erster Vorschlag ist mit Not effizienter: If Not ListBox1.Items.Contains(<dein Item>) Then ListBox1.Items.Add(<dein Item>). Vom Prinzip her wurde das aber schon in Post#6 genannt. Und Vorschlag#2 kann man effizienter so lösen:

    VB.NET-Quellcode

    1. Dim DistinctList = ListBox1.Items.Cast(Of String).Distinct.ToList
    2. ListBox1.Items.Clear()
    3. ListBox1.Items.AddRange(DistinctList.ToArray)

    (shamelessly stolen from this thread from @petaod)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.