none
Eliminar items seleccionados de un listbox RRS feed

  • Pregunta

  • Buenas...

    Necesito que alguien me diga el código que necesito para un botón, el cual al pulsarlo me elimine todos los items seleccionados de un listbox.

    Este es el código que utilizo para cargar la colección del listbox...

    Private Class Fechas
            Property id As Integer
            Property Fecha As DateTime
        End Class

        Private listaFechas As New List(Of Fechas)()
        Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateSelected
            If Not listaFechas.Exists(Function(a) a.Fecha = MonthCalendar1.SelectionStart) And ListBoxDiasMultiples.Items.Count < 30 Then
                Dim fecha As New Fechas()
                fecha.id = listaFechas.Count() + 1
                fecha.Fecha = MonthCalendar1.SelectionStart
                listaFechas.Add(fecha)
                ListBoxDiasMultiples.DataSource = listaFechas.OrderBy(Function(a) a.Fecha).ToList()
                ListBoxDiasMultiples.DisplayMember = "Fecha"
                ListBoxDiasMultiples.ValueMember = "id"
            ElseIf ListBoxDiasMultiples.Items.Count >= 30 Then
                MsgBox("El límite máximo de fechas que puedes seleccionar es 30.", MsgBoxStyle.Critical, "¡Aviso!")
            End If
            ListBoxDiasMultiples.ClearSelected()
        End Sub

    Muchas gracias.

    domingo, 29 de noviembre de 2015 20:38

Respuestas

  • Efectivamente, si estableces los elementos del ListBox a través del DataSource no puedes eliminarlos directamente de la colección Items.

    Deberías hacerlo como lo haces al añadir nuevos elementos: eliminarlos de la lista y volver a asignar la lista modificada al DataSource:

        Private Sub ButtonEliminar_Click(sender As Object, e As EventArgs) Handles Button1.Click
            For Each item As Fechas In ListBoxDiasMultiples.SelectedItems
                listaFechas.Remove(item)
            Next
            ListBoxDiasMultiples.DataSource=listaFechas
            ListBoxDiasMultiples.ClearSelected()
        End Sub
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta legolas2024 lunes, 30 de noviembre de 2015 10:21
    • Marcado como respuesta IvanBcn1982 lunes, 30 de noviembre de 2015 10:23
    lunes, 30 de noviembre de 2015 10:03
  • vale, lo tienes bindeado, pues entonces el metodo que borra, hazlo sobre listaFechas
    • Marcado como respuesta IvanBcn1982 lunes, 30 de noviembre de 2015 10:24
    lunes, 30 de noviembre de 2015 10:21

Todas las respuestas

  • For Each i As ListViewItem In ListView1.SelectedItems
                ListView1.Items.Remove(i)
    Next


    lunes, 30 de noviembre de 2015 8:49
  • Dim listaAux As New List(Of Object)
    For Each a As Object In ListBox2.SelectedItems
     listaAux.Add(a)
    Next
    For Each a As Object In listaAux
     ListBox2.Items.Remove(a)
    Next

    lunes, 30 de noviembre de 2015 9:12
  • Gracias...pero no me sirve este código.

    Me da el siguiente error...

    Información adicional: No se puede convertir un objeto de tipo 'Fechas' al tipo 'System.Windows.Forms.ListViewItem'.

    lunes, 30 de noviembre de 2015 9:12
  • prueba con el segundo
    lunes, 30 de noviembre de 2015 9:15
  •    

    Este es el código que he puesto...tal y como me has dicho...

    Private Sub ButtonEliminar_Click(sender As Object, e As EventArgs) Handles ButtonEliminar.Click
            Dim listaAux As New List(Of Object)
            For Each a As Object In ListBoxDiasMultiples.SelectedItems
                listaAux.Add(a)
            Next
            For Each a As Object In listaAux
                ListBoxDiasMultiples.Items.Remove(a)
            Next
        End Sub

    Pero con este código, me da el siguiente error...

    Información adicional: No se puede modificar la colección Items cuando está establecida la propiedad DataSource.

    lunes, 30 de noviembre de 2015 9:44
  • Efectivamente, si estableces los elementos del ListBox a través del DataSource no puedes eliminarlos directamente de la colección Items.

    Deberías hacerlo como lo haces al añadir nuevos elementos: eliminarlos de la lista y volver a asignar la lista modificada al DataSource:

        Private Sub ButtonEliminar_Click(sender As Object, e As EventArgs) Handles Button1.Click
            For Each item As Fechas In ListBoxDiasMultiples.SelectedItems
                listaFechas.Remove(item)
            Next
            ListBoxDiasMultiples.DataSource=listaFechas
            ListBoxDiasMultiples.ClearSelected()
        End Sub
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta legolas2024 lunes, 30 de noviembre de 2015 10:21
    • Marcado como respuesta IvanBcn1982 lunes, 30 de noviembre de 2015 10:23
    lunes, 30 de noviembre de 2015 10:03
  • vale, lo tienes bindeado, pues entonces el metodo que borra, hazlo sobre listaFechas
    • Marcado como respuesta IvanBcn1982 lunes, 30 de noviembre de 2015 10:24
    lunes, 30 de noviembre de 2015 10:21
  • Muchas gracias a los dos!!

    Ahora si que me funciona...

    Sólo que he tenido que añadir ".tolist()" a la línea...

    ListBoxDiasMultiples.DataSource=listaFechas.tolist()

    Gracias.

    lunes, 30 de noviembre de 2015 10:24