ListBox.Items和ListBox.SelectedItems是否已链接?

时间:2013-03-05 09:21:02

标签: c# winforms enumeration

我正在开发一个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之间是否存在某种联系,或者为什么要修改一个链接,通过另一个不可能进行枚举?

2 个答案:

答案 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或其他任何内容,则没有任何区别。