Windows Forms의 CheckBox CheckedChanged 대 CheckStateChanged
Windows Forms의 CheckBox
컨트롤은 CheckedChanged
및 CheckStateChanged
이벤트를 모두 구현 합니다. 내가 알 수있는 한 확인란의 확인 상태가 변경되면 둘 다 실행됩니다.
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
둘 다 확인란을 선택하거나 선택 취소 하면 실행되고 값이 변경된 후에 둘 다 실행됩니다 .
주요 차이점은 ThreeState
true로 설정하면 다음이 추가된다는 것입니다 Indeterminate
CheckState
.
- 컨트롤은
Indeterminate
"확인된" 것으로 간주 합니다. (Checked == true
). Checked
및 사이의 전환은 이전 과Unchecked
동일합니다.- 사이의 전환
Checked
및Indeterminate
않습니다 하지 화재CheckedChanged
, 이벤트를하기 때문에Checked
숙박true
. - 에서 로 또는 그 반대로 변경 되기 때문에
Unchecked
와 사이를 전환 하면 이벤트Indeterminate
가 발생합니다 .CheckedChanged
Checked
false
true
- 세 가지 상태 확인란을 클릭하면 상태가
Unchecked
에서Checked
로Indeterminate
및 에서 로 전환 됩니다Unchecked
. 여전히 프로그래밍 방식으로 에서Unchecked
로 전환할 수 있습니다Indeterminate
.
( Checked
2개의 상태 부울 속성인 속성과 속성 Checked
의 세 가지 가능한 값 중 하나인 상태 간의 차이점에 유의하십시오 CheckState
.)
TL; DR : 메인 실질적인 차이가 있다는 것이다 CheckedChanged
로부터 전이 할 때의 이벤트는 3 개 상태의 체크 박스를 발생하지 않는 CheckState.Checked
행 CheckState.Indeterminate
또는 그 반대의 두 상태가 체크 된 것으로 간주되기 때문에, ( Checked == true
).
내가 말할 수있는 한:
CheckChanged
확인된 값이 변경되기 전에 발생하므로 값이 .Checked
무엇인지 반환합니다.
CheckStateChanged
확인된 값이 변경된 후에 시작되므로 값이 .Checked
무엇인지를 반환합니다.
CheckState는 새 값이 커밋되기 전에 실행됩니다. CheckStateChanged는 새 값이 커밋된 후 실행됩니다.
체크박스 값 수정 후 업데이트를 수행하기 위해 dataset.haschanges를 찾고 있다면 checkstatechanged 이벤트를 사용해야 합니다. NULL이 들어가는 문제를 방지하려면 threestate를 비활성화해야 합니다.
'IT이야기' 카테고리의 다른 글
익명 이벤트 핸들러 추가 및 제거 (0) | 2021.09.29 |
---|---|
Tomcat은 웹 서버? 아니면 응용 프로그램 서버? (0) | 2021.09.28 |
HTTP 필드 이름 Referer의 철자가 실수였을까? (0) | 2021.09.28 |
파이썬 urllib VS httplib (0) | 2021.09.28 |
소스에서 이벤트 ID에 대한 설명을 찾을 수 없습니다. (0) | 2021.09.28 |