IT이야기

Windows Forms의 CheckBox CheckedChanged 대 CheckStateChanged

cyworld 2021. 9. 28. 21:20
반응형

Windows Forms의 CheckBox CheckedChanged 대 CheckStateChanged


Windows Forms의 CheckBox컨트롤은 CheckedChangedCheckStateChanged이벤트를 모두 구현 합니다. 내가 알 수있는 한 확인란의 확인 상태가 변경되면 둘 다 실행됩니다.

CheckedChanged선행 CheckStateChanged하지만 그 외에는 차이가 없습니다. 내가 뭔가를 놓치고 있습니까? 하나가 다른 것보다 선호되어야 합니까?


내 생각에 그것은 tri-state 체크박스와 관련이 있을 것입니다. 이것은 CheckState setter의 핵심입니다.

 if (this.checkState != value)
 {
   bool flag = this.Checked;
   this.checkState = value;
   if (base.IsHandleCreated)
   {
     base.SendMessage(0xf1, (int) this.checkState, 0);
   }
   if (flag != this.Checked)
   {
     this.OnCheckedChanged(EventArgs.Empty);
   }
   this.OnCheckStateChanged(EventArgs.Empty);
 }

CheckState(따라서 CheckStateChanged)를 사용하면 세 가지 값을 가질 수 있는 확인란을 사용할 수 있습니다. 선택, 선택 취소 또는 '불확정'입니다. 즉, ThreeState 가 true로 설정되어 있습니다.

ThreeState를 사용하지 않는 경우 CheckedChanged만 있으면 됩니다.


ThreeState속성을 로 설정하지 않는 한 두 이벤트는 사실상 동일 합니다 true. 설정하지 않고 ThreeState둘 다 확인란을 선택하거나 선택 취소 하면 실행되고 값이 변경된 후에 둘 다 실행됩니다 .

주요 차이점은 ThreeStatetrue로 설정하면 다음이 추가된다는 것입니다 Indeterminate CheckState.

  • 컨트롤은 Indeterminate"확인된" 것으로 간주 합니다. ( Checked == true).
  • Checked사이의 전환은 이전 Unchecked동일합니다.
  • 사이의 전환 CheckedIndeterminate않습니다 하지 화재 CheckedChanged, 이벤트를하기 때문에 Checked숙박 true.
  • 에서 또는 그 반대로 변경 되기 때문에 Unchecked사이를 전환 하면 이벤트 Indeterminate 발생합니다 .CheckedChangedCheckedfalsetrue
  • 세 가지 상태 확인란을 클릭하면 상태가 Unchecked에서 CheckedIndeterminate에서 전환 됩니다 Unchecked. 여전히 프로그래밍 방식으로 에서 Unchecked전환할 수 있습니다 Indeterminate.

( Checked2개의 상태 부울 속성인 속성과 속성 Checked의 세 가지 가능한 값 중 하나인 상태 간의 차이점에 유의하십시오 CheckState.)

TL; DR : 메인 실질적인 차이가 있다는 것이다 CheckedChanged로부터 전이 할 때의 이벤트는 3 개 상태의 체크 박스를 발생하지 않는 CheckState.CheckedCheckState.Indeterminate또는 그 반대의 두 상태가 체크 된 것으로 간주되기 때문에, ( Checked == true).


내가 말할 수있는 한:

CheckChanged확인된 값이 변경되기 전에 발생하므로 값이 .Checked무엇인지 반환합니다.

CheckStateChanged확인된 값이 변경된 후에 시작되므로 값이 .Checked무엇인지를 반환합니다.


CheckState는 새 값이 커밋되기 전에 실행됩니다. CheckStateChanged는 새 값이 커밋된 후 실행됩니다.

체크박스 값 수정 후 업데이트를 수행하기 위해 dataset.haschanges를 찾고 있다면 checkstatechanged 이벤트를 사용해야 합니다. NULL이 들어가는 문제를 방지하려면 threestate를 비활성화해야 합니다.

참조URL : https://stackoverflow.com/questions/2782566/windows-forms-checkbox-checkedchanged-vs-checkstatechanged

반응형