2010-04-09 29 views
30

Stworzyłem dwa RadioButton (waga i wysokość). Zrobię przełączenie między dwiema kategoriami. Ale mają te same kontrolery ListBox (listBox1 i listBox2).Jak usunąć wszystkie elementy ListBox?

Czy istnieje dobra metoda do prostszego wyczyszczenia wszystkich elementów ListBox? Nie znalazłem removeAll() dla ListBox. Nie podoba mi się mój złożony styl wielolinii, który tutaj zamieściłem.

private void Weight_Click(object sender, RoutedEventArgs e) 
    { 
     // switch between the radioButton "Weith" and "Height" 
     // Clear all the items first 
     listBox1.Items.Remove("foot"); 
     listBox1.Items.Remove("inch"); 
     listBox1.Items.Remove("meter"); 
     listBox2.Items.Remove("foot"); 
     listBox2.Items.Remove("inch"); 
     listBox2.Items.Remove("meter"); 

     // Add source units items for listBox1 
     listBox1.Items.Add("kilogram"); 
     listBox1.Items.Add("pound"); 

     // Add target units items for listBox2 
     listBox2.Items.Add("kilogram"); 
     listBox2.Items.Add("pound"); 
    } 

    private void Height_Click(object sender, RoutedEventArgs e) 
    { 
     // switch between the radioButton "Weith" and "Height" 
     // Clear all the items first 
     listBox1.Items.Remove("kilogram"); 
     listBox1.Items.Remove("pound"); 
     listBox2.Items.Remove("kilogram"); 
     listBox2.Items.Remove("pound"); 

     // Add source units items for listBox1 
     listBox1.Items.Add("foot"); 
     listBox1.Items.Add("inch"); 
     listBox1.Items.Add("meter"); 

     // Add target units items for listBox2 
     listBox2.Items.Add("foot"); 
     listBox2.Items.Add("inch"); 
     listBox2.Items.Add("meter"); 
    } 
+2

Bardzo lubię odpowiedź Matta Dearinga. Wygląda to na lepszą technikę programowania dla tego konkretnego zastosowania, niż tylko wykonanie metody Items.Clear(). –

Odpowiedz

70

to nie to samo, co sposób WinForm i Webform?

listBox1.Items.Clear(); 
+0

To jest kiepska odpowiedź, ponieważ nie udało ci się wytłumaczyć, że nie powinien w ten sposób używać 'Items.Add' w ten sposób. Zobacz odpowiedź Matt Dearning na znacznie lepsze rozwiązanie. –

+2

pytanie brzmi: "Czy istnieje dobra metoda, aby wyczyścić wszystkie elementy ListBox prostsze?" to prostsze pytanie, ma prostą odpowiedź! Odpowiedź Matta dotyczy pytania "Czy robię dobrze?" – balexandre

+15

Sprowadza się do poczucia odpowiedzialności za społeczność. Rozważ: Podchodzi do mnie ośmiolatek z naładowaną bronią (nie zabawką). Najwyraźniej nie zwraca uwagi na to, gdzie go wskazuje. Pyta mnie, jak go nakręcić. W tym przypadku "po prostu pociągnij za spust" jest kiepską odpowiedzią. Lepszą odpowiedzią byłoby wyjaśnienie bezpieczeństwa broni. Dla ośmio-latki najlepszą odpowiedzią byłoby prawdopodobnie odebranie broni i znalezienie swoich rodziców. Stawka jest tutaj dużo niższa, ale zasada jest taka sama: ** Zachęcanie do źle napisanego kodu powoduje prawdziwe obrażenia i prawdziwy ból. ** Kosztuje nas wszystkich. –

2
while (listBox1.Items.Count > 0){ 
    listBox1.Items.Remove(0); 
} 
+1

Czy to jest zasadniczo to, co robi ListBox.Items.Clear()? – Josh

8

Myślę, że byłoby lepiej faktycznie powiązać listy listBox do źródła danych, ponieważ wygląda na to, że dodajesz te same elementy do każdego listbox. Prostym przykładem może być coś takiego:

private List<String> _weight = new List<string>() { "kilogram", "pound" }; 
    private List<String> _height = new List<string>() { "foot", "inch", "meter" }; 

    public Window1() 
    {    
     InitializeComponent(); 
    }   

    private void Weight_Click(object sender, RoutedEventArgs e) 
    { 
     listBox1.ItemsSource = _weight; 
     listBox2.ItemsSource = _weight; 
    } 

    private void Height_Click(object sender, RoutedEventArgs e) 
    { 
     listBox1.ItemsSource = _height; 
     listBox2.ItemsSource = _height; 
    } 
+1

można nawet zrobić w 1 linii: listBox1.ItemsSource = listBox2.ItemsSource = _weight; :) – balexandre

2

Wpisz następujący kod w pliku .cs:

ListBox.Items.Clear();

0

zrobiłem na tej drodze, i działać prawidłowo, aby mnie:

if (listview1.Items.Count > 0) 
     { 
      for (int a = listview1.Items.Count -1; a > 0 ; a--) 
      { 
       listview1.Items.RemoveAt(a); 
      } 
       listview1.Refresh(); 

     } 

Wyjaśnienie: używając „Clear()” usuwa tylko te elementy, nie usuwa następnie od obiektu, za pomocą RemoveAt() w celu usunięcia pozycja z pozycji początkowej po prostu realokuj pozostałe [jeśli usuniesz pozycję [0], pozycja [1] zmieni się w [0] powodując nowe zdarzenie wewnętrzne], , więc usunięcie z zakończenia nie ma wpływu na inną pozycję, jest to Zachowanie stosu, w ten sposób możemy sterować wszystkimi przedmiotami, usuwając obiekt.

+0

Nie rozumiem, dlaczego pytasz o wyczyszczenie listBox, ale twoja odpowiedź używa listview. – Burgo855

0
  • VB ListBox2.DataSource = nic
  • C# ListBox2.DataSource = NULL;
Powiązane problemy