sub shown net form1_load form event activate .net winforms events controls

.net - shown - private sub form1_load



CheckBox de Windows Forms CheckedChanged vs. CheckStateChanged (5)

CheckState (y, por tanto, CheckStateChanged) permite el uso de una casilla de verificación que puede tener tres valores: se puede marcar, desmarcar o ''indeterminado'', es decir, tiene ThreeState establecido en verdadero.

Si no está utilizando ThreeState, CheckedChanged es todo lo que necesita.

El control CheckBox Windows Forms implementa eventos CheckedChanged y CheckStateChanged . Por lo que puedo decir, ambos disparan cuando se cambia el estado marcado de la casilla de verificación.

CheckedChanged precede a CheckStateChanged , pero aparte de eso, no veo diferencia. ¿Me estoy perdiendo de algo? ¿Debería uno ser preferido sobre otro?


CheckState se dispara antes de que se confirme el nuevo valor. CheckStateChanged se dispara después de que se haya confirmado el nuevo valor.

Si busca un conjunto de datos. Cambia para hacer una actualización después de una modificación en el valor de la casilla de verificación, debe usar el evento checkstatechanged. Solo asegúrese de deshabilitar threestate para evitar problemas con NULL.


Los dos eventos son efectivamente iguales a menos que establezca la propiedad ThreeState en true . Sin haber configurado ThreeState , ambos se activarán cuando la casilla de verificación esté marcada o desmarcada y ambos se activarán después de que el valor haya cambiado.

La principal diferencia es cuando establece ThreeState en true, que agrega el estado de cuenta Indeterminate :

  • El control considera Indeterminate como "verificado". ( Checked == true ).
  • La transición entre Checked y Unchecked es la misma que antes.
  • La transición entre Checked e Indeterminate no CheckedChanged evento CheckedChanged , porque Checked mantiene true .
  • La transición entre Unchecked e Indeterminate CheckedChanged evento CheckedChanged , porque Checked cambia de false a true o viceversa.
  • Al hacer clic en una casilla de verificación de tres estados, los estados pasan de Unchecked a Checked a Indeterminate y de nuevo a Unchecked . Aún puede pasar de Unchecked a Indeterminate programáticamente.

(Tenga en cuenta la diferencia entre la propiedad Checked , que es una propiedad booleana de dos estados, y el estado Checked , que es uno de los tres valores posibles de la propiedad CheckState ).

TL; DR: la principal diferencia práctica es que el evento CheckedChanged no se CheckedChanged en una casilla de verificación de tres estados cuando hace la transición de CheckState.Checked en CheckState.Indeterminate o viceversa, porque se considera que ambos estados están CheckState.Indeterminate ( Checked == true )


Por lo que yo puedo decir:

CheckChanged se CheckChanged ANTES de que se cambie el valor verificado, por lo que. .Checked devuelve el valor WAS,

CheckStateChanged se CheckStateChanged DESPUÉS de que se cambie el valor verificado, por lo que. .Checked devuelve el valor ES


Supongo que tiene que ver con casillas de verificación tri-estatales. Estas son las entrañas del setter CheckState:

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); }