Hilde zu remove

  • VB.NET

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

    Hilde zu remove

    Hallo also folgendes, ich bleibe gerad hier hängen:

    VB.NET-Quellcode

    1. For index As Integer = 0 To ListBox1.Items.Count - 1 If ListBox1.Items(index).ToString.Length >= 259 Then ListBox1.Items.Remove('...das 260 char item) ItemssLabel.Text = ListBox1.Items.Count End If Next



    ...
    Hey,

    das Problem liegt an der 'For-Next' Schleife. Sobald du ein Item entfernen willst, wird aber die Größe der Listbox verändert, weshalb es zu einem Fehler beim Aufruf des nächstem Items kommt. Eine Möglichkeit wäre, statt das Item direkt zu löschen, es "vorzumerken" und erst zum Ende hin aus der Listbox zu löschen.

    Gruß, Manschula
    Es genügt, die Schleife rückwärts zu durchlaufen:

    VB.NET-Quellcode

    1. For index As Integer = ListBox1.Items.Count - 1 To 0 Step -1
    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!
    Hey,

    jetzt mal ganz auf die schnelle (und deshalb auch unüberlegt ^^ :(

    VB.NET-Quellcode

    1. ' In dieser Liste werden alle Items zwischengespeichert,
    2. ' die zu lang sind und deshalb später aus der Listbox gelöscht werden sollen
    3. Dim loesch_liste As New List(Of String)
    4. ' Jetzt die Listbox durchgehen und alle Items (as String) in
    5. ' der 'loesch_liste' zum Löschen vormerken
    6. For Each i As String In ListBox1.Items
    7. If i.Length >= 6 Then
    8. loesch_liste.Add(i)
    9. End If
    10. Next
    11. ' Jetzt alle Items, die zu lang sind aus der Listbox löschen
    12. For Each loesch_item As String In loesch_liste
    13. ListBox1.Items.Remove(loesch_item)
    14. Next

    Gruß, Manschula
    Hey,

    n0ise schrieb:

    Ja aber das prob is, wie soll ich das item removen, sonst hät ich ja schreiben könn

    er hat schon recht:

    VB.NET-Quellcode

    1. For index As Integer = ListBox1.Items.Count - 1 To 0 Step -1
    2. If ListBox1.Items.Item(index).ToString.Length >= 5 Then
    3. ListBox1.Items.Remove(ListBox1.Items.Item(index))
    4. End If
    5. Next

    Ich hatte im Hinterkopf, dass sich bei Step-1 auch der Index verschiebt, was aber natürlich nicht der Fall ist. Deshalb kannst du es auch direkt löschen. Insofern ist die Methode von RodFromGermany kürzer und damit auch besser ;)

    Gruß, Manschula
    Probiers mal so:

    VB.NET-Quellcode

    1. For index As Integer = ListBox1.Items.Count - 1 To 0 Step -1
    2. If ListBox1.Items(index).ToString.Length >= 259 Then
    3. ListBox1.Items.Remove(ListBox1.Items(index))
    4. Label1.Text = ListBox1.Items.Count.ToString
    5. End If
    6. Next
    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!