2012-02-28 42 views
6

Mi formulario de Windows contiene dos listboxes. Listbox1 contiene algunos elementos y listbox2 está vacío. Cuando presiono un botón en el formulario, varios elementos seleccionados de listbox1 deberían eliminarse de Listbox1 y copiarse a Listbox2.¿Cómo eliminar múltiples elementos seleccionados en ListBox?

He intentado con foreach loop en listbox1.SelectedItems pero elimina solo 1 elemento de la lista.

¿Alguien tiene solución o código para esto?

+2

¿Podemos ver su ciclo? Es posible que tenga la solución, pero con un error menor :) – f2lollpll

+1

Tal vez lo ayude a eliminar en orden inverso. – brgerner

Respuesta

19

Se puede hacer todo en un solo bucle. Debe utilizar un sencillo para y el bucle hacia atrás sobre selectedIndices:

private void button1_Click(object sender, EventArgs e) 
{ 
    for(int x = listBox1.SelectedIndices.Count - 1; x>= 0; x--) 
    { 
     int idx = listBox1.SelectedIndices[x]; 
     listBox2.Items.Add(listBox1.Items[idx]); 
     listBox1.Items.RemoveAt(idx); 
    } 
} 
+0

Gracias, tu código también está funcionando. +1 para ur ans. – sagar

2

debe almacenar los valores, que quiere eliminar en otro lugar fantástico y eliminarlos de la lista, aquí está el código de ejemplo:

private void button1_Click(object sender, EventArgs e) 
{ 
    ArrayList tmpArr = new ArrayList(); 
    foreach (object obj in listBox1.SelectedItems) 
    { 
     listBox2.Items.Add(obj); 
     tmpArr.Add(obj); 
    } 
    foreach (object obj in tmpArr.ToArray()) 
    { 
     listBox1.Items.Remove(obj); 
    } 
} 
+0

Gracias. está trabajando ahora. +1 – sagar

2

lo hice usando usando el método CopyTo para copiar los elementos a un array de la longitud del número de elementos seleccionados y luego colocado alrededor de esa matriz extraer cada artículo correspondiente de ListBox1.

private void button1_Click(object sender, EventArgs e) 
{ 
    object[] itemsToRemove = new object[listBox1.SelectedItems.Count]; 
    listBox1.SelectedItems.CopyTo(itemsToRemove, 0); 

    foreach (object item in itemsToRemove) 
    { 
     listBox1.Items.Remove(item); 
     listBox2.Items.Add(item); 
    } 
} 
0

Para VS2005 me usuario algo similar ya que no podía utilizar .selectedIndices

for (int i = ListBox1.Items.Count - 1; i >= 0; i--) 
     { 
       if (ListBox1.Items[i].Selected) 
       { 
        ListBox2.Items.Add(ListBox1.Items[i]); 
        ListBox1.Items.Remove(ListBox1.Items[i]); 
       } 

     } 
0
for (int x = listBox1.SelectedIndices.Count - 1; x >= 0; x--) 
     { 
      int var = listBox1.SelectedIndices[x]; 
      listBox1.Items.RemoveAt(var); 

     } 

sus trabajos.

Cuestiones relacionadas