문제

기본적으로 ListViewItem을 두 번 클릭하면 확인 된 상태가 전환됩니다. 항목의 확인란을 클릭하거나 항목이 강조 표시되는 동안 우주 막대를 누르면 확인 된 상태 만 변경되기를 원합니다. 이것은 쉽게 할 수 있습니까?

도움이 되었습니까?

해결책

이 솔루션에는 3 개의 이벤트와 유형 부울의 1 개의 상태 변수가 포함됩니다.

private bool inhibitAutoCheck;

private void listView1_MouseDown(object sender, MouseEventArgs e) {
    inhibitAutoCheck = true;
}

private void listView1_MouseUp(object sender, MouseEventArgs e) {
    inhibitAutoCheck = false;
}

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
    if (inhibitAutoCheck)
        e.NewValue = e.CurrentValue;
}

항목 검사를 통해 다른 체크 상태로의 전환을 피할 수 있습니다 (항목 확인 된 이벤트 전에 호출). 솔루션은 간단하고 확실합니다.

그것을 찾으려면 다른 이벤트로 작은 테스트를했습니다.

클릭 할 때 :

  1. Mousedown <--------------- 억제 된 영역
  2. 딸깍 하는 소리
  3. Mouseclick
  4. 마우스 up ------------>
  5. 항목 검사 (밖의 억제 영역)
  6. 항목 확인

두 번 클릭 할 때 :

  1. Mousedown <--------------- 억제 된 영역
  2. itemselectionChanged
  3. 선택된 indexChanged
  4. 딸깍 하는 소리
  5. Mouseclick
  6. 마우스 up ------------>
  7. Mousedown <--------------- 억제 된 영역
  8. 항목 검사 (내부에 억제 영역)
  9. itemactivate
  10. 더블 클릭
  11. Mousedoubleclick
  12. 마우스 up ------------>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top