2013-08-21 3 views
2

목록보기이고 버튼을 눌러 선택한 항목을 삭제하려고합니다. 또한 다른 일부 작업에 항목을 사용합니다. 기본적으로 필자는 파일의 내용과 일치하는 문자열을 사용합니다. 이렇게하면 선택한 항목이 목록보기에서 첫 번째 경우 작동하지만, 두 번째 등 세 번째의 경우 't 작업 아무튼'1'의 잘못된 인수 값이 'index'에 유효하지 않습니다.

private void delete_button_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
    if (listView1.Items[i].Selected) 
     { 
     string var1 = listView1.SelectedItems[i].ToString(); //error 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items[i].Remove(); 
     i--; 
     } 
    } 
} 

그것은

ArgumentOutofRangeException는 "처리되지 않은 오류 thorws - 잘못된 인수를 값 '1'의 은 '인덱스'

는 '첫 번째 항목이야 만약 내가 문제 야 이해하지 않고 왜에만 작동 유효하지 않습니다.

답변

2

선택한 항목에는 선택된 항목 만 포함되어 있지만 전체 모음을 반복합니다.

for (int i = 0; i < listView1.Items.Count; i++) 
    { 
    if (listView1.Items[i].Selected) 
     { 
     string var1 = listView1.Items[i].ToString(); // <------- 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items[i].Remove(); 
     i--; 
     } 
    } 
2

listView1.Items이 작아지는 동안 색인이 증가한다는 것이 문제라고 생각합니다.

2

당신은 시작하는 Items를 확인하지만, SelectedItems이 1 개 항목 만 i 될 것이라고 4

for (int i = 0; i < listView1.SelectedItems.Count; i++) 
    { 
     string var1 = listView1.SelectedItems[i].ToString(); 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items[i].Remove(); 
     i--; 
     } 
    } 
다음 선택 4 개 Items 요소 만 4가있는 경우 다음 SelectedItems

에 대한 인덱스를 확인

2

var1은 이 아니고 SelectedItems이 아니어야합니다. 이 같은 사실

private void delete_button_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
    if (listView1.Items[i].Selected) 
     { 
     string var1 = listView1.Items[i].ToString(); //NOTE THE DIFFERENCE 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items[i].Remove(); 
     i--; 
     } 
    } 

하지만,이 작업을 수행 할 수있는 더 좋은 방법은 다음과 같습니다

목록 상자에서 항목을 반복하기 때문이다
private void delete_button_Click(object sender, EventArgs e) 
{ 
    foreach (var x in listView1.SelectedItems.Select(x => x)) 
    listView1.Items.Remove(x); 
} 
1

, 그리고 선택 항목. 예를 들어 상자에 10 개의 항목이 있고 2를 선택하면 thrird 반복에 도달하면 실패합니다.

0

사용이 하나 대신 코드 :

foreach(var item in listView.SelectedItems){ //todo } 
0

만 선택한 사람과 모음이있는 경우 왜 반복하는 모든 요소는?

그냥 해주세요.

foreach(var var1 in listView1.SelectedItems.ToArray()) 
    //the to array is to create e new collection from the list else you get one error when you change it. 
    { 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items.Remove(var1); 
    } 
0

시도해보십시오.

for (int i = listView1.Items.Count-1; i >=0 ; i--) 
    { 
    if (listView1.Items[i].Selected) 
     { 
     string var1 = listView1.SelectedItems[i].ToString(); //error 
     string var2 = var1.Substring(31, 5); 
     ... // code for other actions 
     listView1.Items[i].Remove(); 

     } 
    } 
관련 문제