2016-02-19 16 views
5

Tôi có một vòng lặp trong thao tác nút để xóa các mục trống trong ListView của mình, nhưng vấn đề là, khi tôi nhấn nút, nó chỉ xóa thành công các mục duy nhất. Ý tôi là: nó không xoá các mục, khi có vài cái khác:Xóa các mục trong ListView

dụ:

a1 = "" 
a2 = "qwe" 
a3 = "" 
a4 = "" 
a5 = "qwe" 

như vậy, sau khi nút bấm, kết quả sẽ là:

a2 = "qwe" 
a3(or a4 idk) = "" 
a5 = "qwe" 

Tôi nghĩ đó là vấn đề logic đơn giản, nhưng tôi không thể hiểu được.

for (int i = 0; i < listView1.Items.Count; i++) 
      { 
       if (listView1.Items[i].SubItems[2].Text == "") 
       { 
        listView1.Items[i].Remove(); 
       } 
      } 

Vì vậy, vấn đề là vòng lặp bỏ qua một lần kiểm tra sau khi tìm thấy giá trị trống. Làm cách nào để khắc phục sự cố?

Trả lời

4

Khi tháo các mục trong một for loop, vòng lặp ngược:

for (int i = listView1.Items.Count - 1; i >= 0; --i) 
    if (listView1.Items[i].SubItems[2].Text == "") 
    listView1.Items[i].Remove(); 

hoặc sửa đổi các vòng lặp for thành

for (int i = 0; i < listView1.Items.Count;) // no ++i here 
    if (listView1.Items[i].SubItems[2].Text == "") 
    listView1.Items[i].Remove(); 
    else 
    i += 1; // ...but it's here 

Đây là một nguyên tắc chung ngoài ListView mục. Xem những gì đang nhận được vào lúc: tưởng tượng rằng bạn muốn loại bỏ A từ bộ sưu tập

[A, A, B, A] 

khi bạn đã tìm thấy đó là mục 0 phải được xóa, bạn không nên tăng truy cập sau khi xóa, nhưng kiểm tra mới mục 0 lần nữa.

+1

Thông minh. Cảm ơn nhiều! –

Các vấn đề liên quan