3

我正在开发一个 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.ItemsListBox.SelectedItems或者为什么修改一个会使枚举另一个变得不可能?

4

2 回答 2

0

MSDN ListBox.Items您想通过以下代码添加项目:

listbox.Items.Add();

编辑:(我打算在重读后添加以下内容?但我的笔记本电脑因电池电量不足而关闭)

   listBox1.SetSelected(<index>, true);
   listBox1.SetSelected(<index>, true);
   listBox1.SetSelected(<index>, true);
于 2013-03-05T09:29:21.997 回答
0

项目不仅是 ListBox 中的对象,而且是它的状态,如选定状态。因此,无论您更改状态的方式如何,您都需要使用没有 Enumerator 的循环来更改项目的状态。如果您使用 SelectedItems、SelectedIndices、SetSelected 或其他什么,则没有区别。

于 2013-03-05T10:37:57.997 回答