The two events are effectively the same unless you set the ThreeState
property to true
. Without having set ThreeState
, both will fire when the check box is checked or unchecked and both will fire after the value has changed.
The main difference is when you do set ThreeState
to true, which adds the Indeterminate
CheckState
:
- The control considers
Indeterminate
to be "checked". (Checked == true
).
- Transitioning between
Checked
and Unchecked
is the same as before.
- Transitioning between
Checked
and Indeterminate
does not fire the CheckedChanged
event, because Checked
stays true
.
- Transitioning between
Unchecked
and Indeterminate
does fire the CheckedChanged
event, because Checked
changes from false
to true
or vice-versa.
- Clicking on a three state checkbox, the states transition from
Unchecked
to Checked
to Indeterminate
and back to Unchecked
. You can still transition from Unchecked
to Indeterminate
programmatically.
(Note the difference between the Checked
property, which is a two state boolean property, and the Checked
state, which is one of the three possible values of the CheckState
property.)
TL;DR: The main practical difference is that the CheckedChanged
event doesn't fire on a three state checkbox when transitioning from CheckState.Checked
to CheckState.Indeterminate
or vice-versa, because both states are considered to be checked (Checked == true
).