3

TextBoxユーザーが検索クエリを入力できるListBox場所と、すべてのアイテムが表示され、一致したアイテムが強調表示される場所があるWinFormsプロジェクトに取り組んでいます。

を反復しListBox.Itemsて変更するとListBox.SelectedItemsInvalidOperationException: 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、または一方を変更すると他方を列挙できなくなるのはなぜですか?

4

2 に答える 2

0

アイテムは、リストボックス内のオブジェクトであるだけでなく、選択された状態のような状態でもあります。したがって、状態の変更方法に関係なく、アイテムの状態を変更するには、列挙子なしでループを使用する必要があります。SelectedItems、SelectedIndices、SetSelectedなどを使用しても違いはありません。

于 2013-03-05T10:37:57.997 に答える
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 に答える