2012-02-28 29 views
6

Mój formularz okna zawiera dwa pola listy. Listbox1 zawiera niektóre elementy, a listbox2 jest pusty. Po naciśnięciu przycisku na formularzu, wiele wybranych elementów z listy1 powinno zostać usuniętych z Listbox1 i skopiowanych do Listbox2.Jak usunąć wiele wybranych elementów z ListBox?

Próbowałem z pętli foreach na listbox1.SelectedItems, ale usuwa tylko 1 element z listy.

Ktoś ma rozwiązanie tego problemu?

+2

Czy możemy zobaczyć twoją pętlę? Możliwe, że masz rozwiązanie, ale z drobnym błędem :) – f2lollpll

+1

Może to pomaga usunąć w odwrotnej kolejności. – brgerner

Odpowiedz

19

Można zrobić wszystko w jednej pętli. należy użyć prosty dla i pętli wstecz na 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

Dziękujemy też, że kod działa również. +1 dla ur ans. – sagar

2

trzeba przechowywać wartości chcesz usunąć w inny palce, a następnie usunąć je z listy, Oto przykładowy kod:

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

Dziękuję. już działa. +1 – sagar

2

zrobiłem to za pomocą stosując metodę CopyTo skopiować elementy do tablicy długość liczby wybranych pozycji, a następnie owinięty wokół tej tablicy usunięcie każdego odpowiedni element z 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

Dla VS2005 I użytkownika coś podobnego jak ja nie może korzystać .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); 

     } 

swoje prace.

Powiązane problemy