Два события фактически одинаковы, если вы не установите для свойства 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
, которое является логическим свойством с двумя состояниями, и состоянием Checked
, которое является одним из трех возможных значений свойства CheckState
.)
TL; DR: Основное практическое отличие состоит в том, что событие CheckedChanged
не срабатывает при установке флажка с тремя состояниями при переходе от CheckState.Checked
к CheckState.Indeterminate
или наоборот, поскольку оба состояния считаются проверенными. (Checked == true
).