MultiSelect Remove할 때 주의할 점이 있다!

반드시 역순으로 삭제를 해야한다....

 

리스트뷰에서 ListView.SelectedItems[0] 이면 리스트뷰에서 여러 개 선택한 개수 중에 맨 위에 선택한 곳의 index의 주소값이 ListView.SelectedItems[0] 안에 들어가는 것!!!!!!!

 

그렇기 때문에 순차적으로 1,3번째삭제를 하게 되면 (1은 0번째!)

0번째 -- 1

1번째 -- 2  << 삭제를 하면

2번째 -- 3

3번째 -- 4  << 다음 삭제 예정

4번째 -- 5

 

==삭제 후 ListView 인덱스 갱신==

0번째 -- 1

1번째 -- 3

2번째 -- 

3번째 -- 5  << 여기가 3번째가 되어버림


가 되는데 listView의 인덱스는 변경이 되었지만, listView.SelectedIndeces의 인덱스는 변경되지 않고 그대로 3번째인 5가 삭제가 되어버리는 현상이 나타나게 된다. 나는 4를 삭제하고 싶었는데..오더가 잘못 되게 되는 것이다.

따라서 역순으로 삭제를 하게 되면 위와 같은 현상은 발생하지 않게 되는 것이다. 역순으로 삭제를 해버리면 인덱스가 다시 고쳐져도 위의 인덱스는 영향을 받지 않기 때문!!!

따라서 반드시 다중 삭제를 할 때는 역순으로 삭제해야 한당


따라서 예제코드를보면 


int cnt = listView1.SelectedItems.Count;

for (int i =  cnt-1 ; i >= 0; i--)

{

listView1.Items.Remove(listView1.SelectedItems[i]);

}


이렇게 삭제를 하면 된다!

+ Recent posts