리스트뷰 다중 선택을 했을 때 체크박스가 하나 누락되는 현상이 나온다.
이는 팀장님께서 원인을 알려주셨는데,
"아이템을 클릭했을때 체크박스가 선택되는 거랑(선택 시 true), 쉬프트 눌러서 다중 선택 했을때 체크박스가 선택되는거(앞서 체킹되었던 true 에서 false 로 바뀜)랑 이중으로 선택이 되었기 때문에 체크박스가 마지막 클릭하는 하나가 누락되는 현상이 벌어지는 것"이라고 알려주셨다..
클릭 이벤트를 직접 들어가서 오버로딩을 하든지, 코드를 바꾸든지 해야될 것 같다고 생각했지만.. 어떻게하는건지 난 씨샵 초보이기 때문에...
그냥 클릭을 했을때 체크가 되는 현상을 무효화 시키고, 다시 원하는 부분만 체크 시키는 방법으로 생각을 바꿨다.
클릭 했을 때 체크가 되는 현상을 무효화 시키는 방법은 다른 글에 기재해놓았다
여기 << 로 들어가서 확인해보면 된다!
위와 같이 선택시 체킹되는것을 무효화 한 다음 다음과 같이 작성하면 된다.
리스트뷰의 이벤트 속성인 ItemChecked를 이용했다.
ItemChecked는 아이템이 체킹될때마다 발생하는 이벤트이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e) { // 멀티셀렉을 했을 때 체킹 상태를 저장하기 위해 사용. 나머지들도 처음 체킹한걸로 바꿔야하니까.. bool isfirst = true; // 처음 체킹한 상태를 나머지들에게도 적용하기 위함 bool listViewCurrentCheck = false; int cnt = listView1.Items.Count; ListViewItem lvi = new ListViewItem(); for (int i = 0; i < cnt; i++) { lvi = listView1.Items[i]; //멀티셀렉한 부분이 아닌 곳에서 단일 체킹을 하게 되면, 멀티셀렉한 부분이 해제되도록 함 if(e.Item.Selected == false) { lvi.Selected = false; } else { if (lvi.Selected == true) { // 체킹한 곳의 상태를 저장 (지금상태가 true 인지 false인지) if (isfirst == true) { lvi.Checked = e.Item.Checked; listViewCurrentCheck = lvi.Checked; isfirst = false; } //위의 저장을 다른 멀티 셀렉된 아이템들에게도 적용 else { lvi.Checked = listViewCurrentCheck; } } } } | cs |
ㅠㅠ 이거 생각한다고 하루를 삽질했따....삽삽삽삽
MultiSelecte CheckBox Check , 체크박스 하나 누락 , 리스트뷰 체크박스 버그 , 리스트뷰 체크박스 하나 선택이 안됌
'프로그래밍 > C#' 카테고리의 다른 글
C# ListView 특정 Column에서 원하는 값 찾기 (0) | 2017.02.21 |
---|---|
C# Dictionary에서 Value값을 이용하여 Key 값 가져오기 (0) | 2017.02.15 |
C# Debug 창 출력 (0) | 2017.02.14 |
C# ListView Item CheckBox Click 문제 (0) | 2017.02.14 |
C# ListView MultiSelect Remove 하는 방법 (0) | 2017.02.08 |