我正在开发一个WinForms项目,其中有TextBox
用户可以输入搜索查询,ListBox
所有项目都可见,匹配的项目突出显示。
当我迭代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.Items
和ListBox.SelectedItems
之间是否存在某种联系,或者为什么要修改一个链接,通过另一个不可能进行枚举?
答案 0 :(得分:0)
每MSDN ListBox.Items,
您希望通过以下代码添加项目:
listbox.Items.Add();
编辑:(我想在重新阅读之后添加以下内容?但我的笔记本电脑因电池电量不足而关闭)
listBox1.SetSelected(<index>, true);
listBox1.SetSelected(<index>, true);
listBox1.SetSelected(<index>, true);
答案 1 :(得分:0)
项目不仅仅是ListBox中的对象,还有它所处状态的状态。因此,无论您更改状态的方式如何,都需要使用不带Enumerator的循环来更改项的状态。如果您使用SelectedItems,SelectedIndices,SetSelected或其他任何内容,则没有任何区别。