2016-02-19 248 views
5

我在按鈕操作中有一個循環,用於刪除我的ListView中的空項目,但問題是,當我按下按鈕時,它僅成功刪除單個項目。我的意思是:它不會刪除的項目,當有後再過一個:刪除ListView中的項目

例如:

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

如此,點擊按鈕後,其結果將是:

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

我想這很容易出現邏輯問題,但我無法弄清楚。

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

所以問題是循環在找到空值後跳過一次檢查。 我該如何解決它?

回答

4

當一個for loop,環落後刪除項目:

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

或修改for循環爲

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 

這超出ListView項目一個共同的原則。看看天色上:假設你想從集合

[A, A, B, A] 

刪除A當你發現這是第0項必須被刪除,你不應該增加刪除後計數器,但測試第0項再次

+1

聰明。非常感謝你! –