Mover elemento de un cuadro de lista a otro cuadro de lista (c# webforms)

Me encuentro con un problema extraño por el cual puedo mover elementos de un cuadro de lista a otro, pero no puedo volver a mover ningún elemento al cuadro de lista original. Aquí está mi código:

private void MoveListBoxItems(ListBox from, ListBox to)
{
    for(int i = 0; i < first_listbox.Items.Count; i++)
    {
        if (first_listbox.Items[i].Selected)
        {
            to.Items.Add(from.SelectedItem);
            from.Items.Remove(from.SelectedItem);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

protected void Button2_Click(object sender, EventArgs e)
{
    MoveListBoxItems(first_listbox, second_listbox);
}

protected void Button1_Click(object sender, EventArgs e)
{
    MoveListBoxItems(second_listbox, first_listbox); 
}

El evento button2 funciona bien, sin embargo, el evento button1 no. Los cuadros de lista no están vinculados a datos y les he agregado elementos manualmente.

¿Quizás hay algo muy obvio que me estoy perdiendo aquí?

Gracias por su ayuda por adelantado.

preguntado el 02 de julio de 12 a las 21:07

2 Respuestas

Cámbielo a esto:

private void MoveListBoxItems(ListBox from, ListBox to)
{
    for(int i = 0; i < from.Items.Count; i++)
    {
        if (from.Items[i].Selected)
        {
            to.Items.Add(from.SelectedItem);
            from.Items.Remove(from.SelectedItem);

            // should probably be this:
            to.Items.Add(from.Items[i]);
            from.Items.Remove(from.Items[i]);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

Su método original estaba usando first_listbox en estos dos lugares, en lugar de from. Además, imagino que su código no funciona si se selecciona más de un elemento.

Respondido 02 Jul 12, 21:07

NominSim también detectó otro error, donde esto no funcionaría si tuviera más de 1 elemento seleccionado. - MusiGénesis

Cambie sus bucles for para iterar sobre el parámetro local from, no específicamente el first_listbox:

private void MoveListControlItems(ListControl from, ListControl to)
{
    for(int i = 0; i < from.Items.Count; i++)
    {
        if (from.Items[i].Selected)
        {
            to.Items.Add(from.Items[i]);
            from.Items.Remove(from.Items[i]);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

También desea cambiar la adición y eliminación si desea mover varios elementos a la vez.

Solo otro pensamiento, aunque es principalmente una preferencia personal, si cambia los tipos de parámetros a ListControl Puedes usar el mismo método para ComboBox's también.

Respondido 02 Jul 12, 21:07

Gracias Nominsim por tu ayuda. - Mike91

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.