2010-04-09 40 views
30

Tôi đã tạo hai RadioButton (Trọng lượng và Chiều cao). Tôi sẽ chuyển đổi giữa hai loại. Nhưng họ chia sẻ cùng một ListBox Controllers (listBox1 và listBox2).Làm cách nào để xóa tất cả các mục ListBox?

Có phương pháp nào tốt để xóa tất cả các mục ListBox đơn giản hơn không? Tôi không tìm thấy removeAll() cho ListBox. Tôi không thích phong cách đa dòng phức tạp của mình mà tôi đã đăng ở đây.

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

Tôi thích câu trả lời của Matt Dearing rất nhiều. Nó trông giống như kỹ thuật lập trình tốt hơn cho việc sử dụng cụ thể này, hơn là chỉ thực hiện phương thức Items.Clear(). –

Trả lời

70

không giống với dạng Winform và Webform?

listBox1.Items.Clear(); 
+0

Đây là câu trả lời không tốt vì bạn không giải thích được rằng mình không nên sử dụng 'Items.Add' theo cách đó ngay từ đầu. Xem câu trả lời của Matt Dearning về một giải pháp tốt hơn nhiều. –

+2

câu hỏi là "Có phương pháp nào tốt để xóa tất cả các mục ListBox đơn giản hơn không?" đó là một câu hỏi đơn giản, nó có một câu trả lời đơn giản! Matt trả lời là cho câu hỏi "Tôi đang làm điều đúng ở đây?" – balexandre

+15

Điều đó dẫn đến trách nhiệm cộng đồng. Hãy xem xét: Một đứa trẻ tám tuổi đến với tôi cầm một khẩu súng được nạp (không phải đồ chơi). Anh rõ ràng không chú ý đến nơi anh đang chỉ nó. Anh ấy hỏi tôi làm thế nào để làm cho nó bắn. Trong trường hợp này "chỉ cần kéo kích hoạt này" là một câu trả lời nghèo nàn. Một câu trả lời tốt hơn là giải thích an toàn súng. Đối với một tám tuổi câu trả lời tốt nhất có lẽ sẽ là để lấy súng đi và đi tìm cha mẹ của mình. Các cổ phần thấp hơn nhiều ở đây nhưng nguyên tắc là như nhau: ** Khuyến khích mã viết kém gây thiệt hại thực sự và đau thực. ** Nó có một chi phí thực sự cho tất cả chúng ta. –

2

Bạn sẽ có thể sử dụng phương thức Clear().

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

Đây có phải là những gì ListBox.Items.Clear() thực hiện không? – Josh

8

Tôi nghĩ sẽ tốt hơn nếu liên kết danh sách của bạn với nguồn dữ liệu, vì có vẻ như bạn đang thêm cùng một yếu tố vào mỗi hộp danh sách. Một ví dụ đơn giản sẽ là một cái gì đó như thế này:

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

bạn thậm chí có thể làm trong 1 dòng: listBox1.ItemsSource = listBox2.ItemsSource = _weight; :) – balexandre

2

Viết đoạn mã sau trong cs file:

ListBox.Items.Clear();

0

tôi đã thực hiện trên con đường này, và hoạt động đúng với tôi:

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

     } 

Giải thích: sử dụng "Clear()" xóa chỉ mục, không loại bỏ sau đó từ đối tượng, sử dụng RemoveAt() để loại bỏ một mục của vị trí bắt đầu chỉ cần phân bổ những người khác [nếu bạn xóa mục [0], mục [1] biến thành [0] kích hoạt sự kiện nội bộ mới], để xóa khỏi vị trí kết thúc không ảnh hưởng đến người khác, Hành vi ngăn xếp, theo cách này chúng tôi có thể Ngăn xếp trên tất cả các mục, đặt lại đối tượng.

+0

Tôi không hiểu tại sao yêu cầu của bạn về việc xóa một listBox, nhưng câu trả lời của bạn là sử dụng một listview. – Burgo855

0
  • VB ListBox2.DataSource = Nothing
  • C# ListBox2.DataSource = null;
Các vấn đề liên quan