Doppelte ListBox Items löschen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von n0ise.

    Doppelte ListBox Items löschen

    Hey,

    bin nun bald mit meinem Renamer fertig :)

    er renamt sogar schon den Text der in die ListBox gleaden wurde.

    Nun möchte ich ein Button mit "Remove Double Items" hinzufügen.

    Aber ich weiß nicht mit welchen Befehl ich die Item Namen checke. Kenne nur Items.Add, Item/s.Remove und Items.Count .. ^^

    Mir ist klar das ich das mit einer For i Schleife machen muss...aber ich weiß nicht wie genau das gehen soll..

    VB.NET-Quellcode

    1. For i As Integer = ListBox1.Items.Count - 0 To -1
    2. If ListBox1.Items.
    3. ' weiß nichmehr weiter..
    4. Next


    Mit -0 To -1 fängt die Schleife doch von Der 1. Spalte der ListBox an und bei der letzten Spalte hört sie auf?

    Bin aber schon ziemlich stolz das ich das renamen alleine hinbekommen habe als Anfänger :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „n0ise“ ()

    z.B. For Each itm As String in ListBox1.Items
    'das wird für jedes Item durchgeführt der Name ist immer itm
    Next

    gruß Einsteiger
    Das is mir schon klar : D

    mit For Each kann man aber kein item removen da sonst ein Laufzeitfehler kommt, mit for each gibt man eig. nur Arrays aus.

    Und ich weiß das ich so die Items checke, ja oben falsch ausgedrückt, aber wie lösche ich die doppelten?
    oder so:

    VB.NET-Quellcode

    1. For i As Integer = 0 To ListBox1.Items.Count - 1
    2. Dim a As String = ListBox1.Items(i)
    3. Dim c As Integer = 0
    4. For Each itm As String In ListBox1.Items
    5. If itm = a Then
    6. c+=1
    7. EndIf
    8. Next
    9. If c > 0 Then
    10. ListBox1.Items.RemoveAt(i)
    11. EndIf
    12. Next


    Gruß Einsteiger

    Einsteiger schrieb:

    oder so:

    VB.NET-Quellcode

    1. For i As Integer = 0 To ListBox1.Items.Count - 1
    2. Dim a As String = ListBox1.Items(i)
    3. Dim c As Integer = 0
    4. For Each itm As String In ListBox1.Items
    5. If itm = a Then
    6. c+=1
    7. EndIf
    8. Next
    9. If c > 0 Then
    10. ListBox1.Items.RemoveAt(i)
    11. EndIf
    12. Next


    Gruß Einsteiger

    So wird es nicht funktionieren. Spätestens nach dem Löschen eines Items knallt es, da die Anzahl der Items sich geändert hat.

    VB.NET-Quellcode

    1. Dim tmpList As New List(Of String)
    2. For Each itm As String In ListBox1.Items
    3. If Not tmpList.Contains(itm) Then tmpList.Remove(itm)
    4. Next
    Funktioniert nicht, löscht keine doppelten Items in der Liste die geladen wurden..

    n0ise schrieb:

    VB.NET-Quellcode

    1. Dim tmpList As New List(Of String)
    2. For Each itm As String In ListBox1.Items
    3. If Not tmpList.Contains(itm) Then tmpList.Remove(itm)
    4. Next
    Funktioniert nicht, löscht keine doppelten Items in der Liste die geladen wurden..

    kann es auch nicht, denn Du machst es verkehrt. Schau den Code von mir nochmal genauer an.

    VB.NET-Quellcode

    1. Dim tmpList As New List(Of String)
    2. For Each itm As String In ListBox1.Items
    3. If Not tmpList.Contains(itm) Then tmpList.Add(itm)
    4. Next
    5. ListBox1.Items.Clear()
    6. ListBox1.Items.AddRange(tmpList.ToArray)


    Okay es geht, aber ich verstehe den Sinn des Codes irgendwie nicht ._.

    Kleine Erläuterung? ^^

    zb:

    VB.NET-Quellcode

    1. If Not tmpList.Contains(itm) Then tmpList.Add(itm)
    Warum denn .Add ?
    Und

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    Löscht das nicht alle Items?
    es wird eine "imaginäre ListBox" erzeugt, also quasi eine List

    dann werden alle Items abgefragt, und wenn es sie noch nicht in dieser List gibt werden si hinzugefügt, sonst nicht

    die ListBox wird geleert

    die ListBox wird mit den Werten aus der imaginären List gefüllt, die ja keine doppelten Items mehr hat

    Gruß Einsteiger
    Achsoo, deswegen auch

    VB.NET-Quellcode

    1. If Not tmpList.Contains(itm) Then tmpList.Add(itm)


    ALso enthält die tmplist nicht die items wie in itm dann füge dsie in der ListBox1 hinzu.

    Und hier

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(tmpList.ToArray)

    Fügt er die Items als Feld dann halt in die ListBox ein ^^ -> die vorher drinn standen bloß mit keinen doppelten Items mehr, yo logisch =D

    Ok gecheckt. Danke ^^