El DivisionListBox se usa para seleccionar valores en el SitesListbox de la siguiente manera: Cuando seleccione un elemento en el DivisionListBox, seleccionará todos los elementos en SitesListbox que coincidan con el mismo valor.

Una vez que se seleccionan los valores de SiteListbox, uso el SiteButton para mover todos los valores seleccionados al StoreslistBox vacío con éxito.

Mi problema ocurre cuando selecciono manualmente varios elementos en SiteListbox o StoreslistBox y presiono SiteButton o StoreButton para mover elementos entre Listboxes. Mueve un elemento a la vez o algunos de los elementos seleccionados, pero nunca mueve todos los elementos seleccionados (que pueden ser rastreados por las etiquetas).

¿Qué está causando este problema y cuál podría ser una posible solución para esto?

Mi código

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    DivisionSelection()

End Sub

Private Sub DivisionSelection()

    If DivisionListBox.SelectedValue IsNot Nothing Then
        SitesListBox.SelectionMode = ListSelectionMode.Multiple
        For Each item As ListItem In SitesListBox.Items
            If item.Value = DivisionListBox.SelectedValue Then
                item.Selected = True
            End If
        Next
    End If

    Dim x As Integer = 0
    Dim Siteitem As ListItem
    For Each Siteitem In SitesListBox.Items
        If Siteitem.Selected Then
            x += 1
            Label1.Text = x
        End If
    Next
End Sub

Protected Sub SiteButton_Click(sender As Object, e As EventArgs) Handles SiteButton.Click

    StoresListBox.SelectionMode = ListSelectionMode.Multiple
    While SitesListBox.SelectedItem IsNot Nothing
        StoresListBox.Items.Add(SitesListBox.SelectedItem)
        SitesListBox.Items.Remove(SitesListBox.SelectedItem)
    End While

    'counts the selected items
    Dim x As Integer = 0
    Dim Siteitem As ListItem
    For Each Siteitem In SitesListBox.Items
        If Siteitem.Selected Then
            x += 1
            Label1.Text = x
        End If
    Next
End Sub

Protected Sub StoreButton_Click(sender As Object, e As EventArgs) Handles StoreButton.Click

    StoresListBox.SelectionMode = ListSelectionMode.Multiple
    While StoresListBox.SelectedItem IsNot Nothing
        SitesListBox.Items.Add(StoresListBox.SelectedItem)
        StoresListBox.Items.Remove(StoresListBox.SelectedItem)
    End While

    'counts the selected items
    Dim x As Integer = 0
    Dim Storeitem As ListItem
    For Each Storeitem In SitesListBox.Items
        If Storeitem.Selected Then
            x += 1
            Label2.Text = x
        End If
    Next

End Sub
0
darknight 16 oct. 2020 a las 22:08

1 respuesta

La mejor respuesta

Agregué los elementos seleccionados a una lista; luego recorrió la lista para agregar y eliminar. Cuando una colección o índices se alteran dentro de un bucle, pueden tener resultados inesperados.

Protected Sub Button1_Click(ByVal sender As Object, e As System.EventArgs) Handles Button1.Click
    Dim lstItems As New List(Of ListItem)
    For Each item As ListItem In ListBox1.Items
        If item.Selected Then
            lstItems.Add(item)
        End If
    Next
    'It wasn't clear if you wanted the items to remain selected after moving.
    ListBox1.ClearSelection()
    Debug.Print(lstItems.Count.ToString)
    For Each item As ListItem In lstItems
        ListBox2.Items.Add(item)
        ListBox1.Items.Remove(item)
    Next
End Sub
1
Mary 16 oct. 2020 a las 22:03