Feedback

Ausgewählte Items in einer ListBox löschen

Sprache: VB

Dieses Snippet zeigt die beste Methode, ausgewählte Items einer ListBox zu löschen. Durch verschiedene Performance-Tests wurde diese Variante erarbeitet. Beim Durchlaufen der Auflistung der Listbox-Items darf diese nicht verändert werden. Daher ist es nicht möglich, bei diesem Durchlauf die Items gleich zu löschen. Die Indizes der zu löschenden Items werden daher zunächst in einer Collection gespeichert. Anschließend werden die Items (in ungekehrter Reihenfolge) aus der Auflistung entfernt.
Public Sub DeletedCheckedItemsInListbox(lb as ListBox)
      Dim colDel As New List(Of Integer)


      For Each i As Integer In lb.CheckedIndices
	colDel.Add(i)
      Next
      colDel.Reverse()
      For Each i As Integer In colDel
	lb.Items.RemoveAt(i)
      Next
      colDel = Nothing
End Sub
Public Sub DeletedCheckedItemsInListbox(lb as ListBox)
      Dim colDel As New List(Of Integer)


      For Each i As Integer In lb.CheckedIndices
	colDel.Add(i)
      Next
      colDel.Reverse()
      For Each i As Integer In colDel
	lb.Items.RemoveAt(i)
      Next
      colDel = Nothing
End Sub

6 Kommentare

  1. Hi Metallfrosch, das ist genial und war wichtig für mich! [b]Vielen Dank[/b]!

    Anmerkung: Da CheckedIndices in ASP.NET nicht verfügbar ist, hier die Abwandlung:
    [code] Public Sub DeletedCheckedItemsInListbox(ByVal lb As ListBox)
    Dim colDel As New List(Of Integer)

    For i As Integer = 0 To lb.Items.Count – 1
    If lb.Items(i).Selected Then colDel.Add(i)
    Next
    colDel.Reverse()
    For Each i As Integer In colDel
    lb.Items.RemoveAt(i)
    Next
    colDel = Nothing
    End Sub
    [/code]

  2. Eine elegante Lösung!
    Nur leider komisch: Bei mir funzt das nicht.
    In der Listbox steht die SelectionMode-Eigenschaft auf MultiExtended.
    Die Zeile „For Each i As Integer In lb.CheckedIndices“ löst bei mir sofort den Fehler aus, daß der Index außerhalb des Bereiches war.
    Hat jemand eine Idee?