1

リストボックスで項目が選択されていない場合、コードは正常に機能します。

リストボックスで少なくとも1つの項目が選択されている場合、最初の項目が評価された後、foreachの反復が中断されます。例外はInvalidOperationExceptionであり、詳細にはItemsコレクションが変更されたことが示されています。

foreach (object item in listBoxFiles.Items) //InvalidOperationException occurs
{
    if (listBoxFiles.SelectedItems.Contains(item)) 
    {
        //do nothing
    }
}

編集:ListBoxItem.IsSelectedのようなものを探していましたが、存在しません。

4

1 に答える 1

3

問題を再現できます。へのアクセスは、への呼び出しではなく、SelectedItems変更されているようです。それはすべきではありません。現時点では説明がありません。ItemsContains

回避策:

itemに含まれているかどうかを確認すると、代わりにSelectedItemsすぐに繰り返すことができますSelectedItems。もう1つの方法はSelectedItems、次のように反復の前にコピーすることです。

List<object> selectedItems = new List<object>();
selectedItems.AddRange( listBoxFiles.SelectedItems.OfType<object>() );
于 2012-07-23T06:11:14.347 に答える