2012-07-23 14 views
1

ListBox에서 항목을 선택하지 않으면 코드가 올바르게 작동합니다.ListBox.Items를 통해 Intertering 할 때 예외가 발생합니다.

ListBox에서 하나 이상의 항목을 선택한 경우 foreach 반복은 첫 번째 항목을 평가 한 후에 중단됩니다. 예외는 InvalidOperationException이며 세부 정보는 Items 컬렉션이 수정되었음을 나타냅니다.

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

편집 : 을 ListBoxItem.IsSelected처럼 내가 뭔가를 찾고 있었다 그러나 그것은 존재하지 않습니다.

+0

아이템 콜렉션에는 아무 것도하지 않습니까? –

+0

사실, if 절 안에있는 모든 코드를 제거한 후에도 오류는 계속 재생산됩니다. – kennyzx

+1

아무 것도 선택하지 않으면 throw됩니다. – EricSchaefer

답변

2

문제가 재현 될 수 있습니다. SelectedItems에 대한 액세스가 Contains이 아닌 Items으로 변경된 것으로 보입니다. 그렇게해서는 안됩니다. 나는 그 순간에 아무런 설명도하지 않고있다.

해결 방법 :

item이 당신이 바로 대신 SelectedItems을 반복 할 수 SelectedItems에 포함되어있는 경우 체크하면

. 또 다른 방법은 반복 전에 다음과 같이 반복을 복사하는 것입니다.

List<object> selectedItems = new List<object>(); 
selectedItems.AddRange(listBoxFiles.SelectedItems.OfType<object>()); 
+0

전체 복사본을 만들 필요가 없습니다 ... 그냥 반복 밖에서 새 참조를 만들 수 있습니다 :'ListBox.SelectedObjectCollection selectedItems = listBoxFiles.SelectedItems; ' –

+0

@drumboog - 새로운 참조가 작동하지 않습니다. 전체 복사본을 만들어야합니다 (Eric의 해결 방법). – kennyzx

+0

아니요, 작동하지 않습니다 (시도했습니다). – EricSchaefer

관련 문제