2012-02-28 2 views
6

Моя форма окон содержит два списка. Listbox1 содержит некоторые элементы в нем, а listbox2 пуст. Когда я нажимаю кнопку в форме, тогда несколько выбранных элементов из спискаbox1 должны быть удалены из спискаbox1 и скопированы в Listbox2.Как удалить несколько выбранных элементов в ListBox?

Я попытался использовать цикл foreach в listbox1.SelectedItems, но он удаляет только 1 элемент из списка.

У кого-нибудь есть решение или код для этого?

+2

Можем ли мы увидеть вашу петлю? У вас может быть решение, но с незначительной ошибкой :) – f2lollpll

+1

Возможно, это поможет удалить в обратном порядке. – brgerner

ответ

19

Вы могли бы сделать все в одном цикле. Вы должны использовать простой для и петли назад на 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

Спасибо, ур код также работает. +1 для ур. – sagar

2

вы должны хранить значения, вы хотите удалить в других Palce, а затем удалить их из списка, Вот пример кода:

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

Спасибо. он работает сейчас. +1 – sagar

2

Я сделал это с помощью использования методы CopyTo, чтобы скопировать элементы в массив длиной подсчета выбранных элементов, а затем петля вокруг этого массива удаления каждого соответствующий элемент из 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

Для VS2005 I пользователя что-то подобное, как я не мог использовать .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); 

     } 

его работ.

Смежные вопросы