2010-10-18 42 views
0

我正在嘗試創建一個選項,以刪除選中的列表框中的所有未選中的項目。一切都很順利,但是當我得到2個或更多具有相同名稱的項目時,它會出錯。在CheckedListBox中取消選中錯誤的項目

例如:我有三個項目在列表框中的名稱相同,第一個選中。 我現在運行的情況下,但現在最後2被刪除,第一個是選中...

private void removeAllUncheckedProcessesToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    int i = 0; 
    while (true) 
    { 
     if (clbInstant.Items.Count - i == 0) 
     { 
      break; 
     } 
     if (clbInstant.GetItemCheckState(i) == CheckState.Checked) 
     { 
      i++; 
     } 
     else 
     { 
      clbInstant.Items.Remove(clbInstant.Items[i]); 
     } 
    } 
} 

如果我運行調試器,它進入循環,它i++,再次重複這個循環,在其他情況下,在clbInstant(0)的其他檢查狀態被檢查之前,clbInstant(1)的檢查狀態未被檢查,並且i是1.但是在其他情況下,我得到2個項目,兩個都未被檢查。 現在它運行第二個最後一次循環,並刪除最後選中的項目,有1項未選中保持結果...

如果我有不同的名稱的項目,我一點問題都沒有。 ..

回答

1

爲什麼不試試這個代替。

foreach(object itemChecked in checkedListBox1) 
    { 
     if(checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked))== CheckState.UnChecked) 
      checkedListBox1.Items.Remove(itemChecked) 
    } 
+0

修正的答案。 – kyndigs 2010-10-18 10:45:42

+0

.CheckedItems是可能的,但由於某種原因.UncheckedItems不是... – Ivar 2010-10-18 11:01:40

+0

對不起,這是一個錯字:p現在排序,這應該通過所有列表項目並刪除未選中的項目。 – kyndigs 2010-10-18 11:02:30

相關問題