2013-03-05 28 views
3

我正在開發一個WinForms項目,其中有一個用戶可以輸入搜索查詢的TextBox以及一個ListBox,其中所有項目都可見並且突出顯示匹配的項目。是否鏈接了ListBox.Items和ListBox.SelectedItems?

當我遍歷,ListBox.Items和修改ListBox.SelectedItems,我得到一個InvalidOperationException: List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.

這裏的

private void SearchTextBox_TextChanged(object sender, EventArgs e) 
{ 
    listBox.ClearSelected(); 

    foreach (var item in listBox.Items) // Exception happens here... 
    { 
     if (item.ToString().Contains(SearchTextBox.Text)) 
      listBox.SelectedItems.Add(item); // ... but I'm not modifying listBox.Items 
    } 
} 

我已經想到了一個更好的解決方案的代碼,但我還是想知道爲什麼發生異常。

是否有某種聯繫的ListBox.ItemsListBox.SelectedItems之間,或者爲什麼修改之一,請通過其他不可能枚舉?

+2

在我的經驗中,SelectedItems是通過內置事件來設置的,通過點擊鼠標來選擇項目。 您是否試圖通過yourListBox.SetSelected(yourIndexToSelect)選擇項目; ? – Michael 2013-03-05 09:24:48

+0

afaik它應該與一個正常的循環,但我還沒有做到這一點與列表框。你可以使用@邁克爾的嘗試然後 – Vogel612 2013-03-05 09:35:11

回答

0

MSDN ListBox.Items你想通過下面的代碼添加項目:

listbox.Items.Add();

編輯:(我的意思是重讀後添加以下,但我的筆記本電腦關閉,由於電池電量低?)

listBox1.SetSelected(<index>, true); 
    listBox1.SetSelected(<index>, true); 
    listBox1.SetSelected(<index>, true); 
+1

請在回答之前仔細閱讀問題。 – 2013-03-05 09:30:19

+0

@ MD.Unicorn謝謝修改我的問題,以反映上述編輯和筆記本電腦死亡:/ – jordanhill123 2013-03-05 09:45:23

0

項目不只是在ListBox中的對象,但也其狀態像選定的狀態。因此,無論您更改狀態的方式如何,您都需要使用不帶Enumerator的循環來更改項目的狀態。如果你使用SelectedItems,SelectedIndices,SetSelected或其他什麼都沒有區別。