darse de baja del evento antes de configurar:
check1.CheckChanged -= check1_CheckChanged;
entonces se puede establecer mediante programación el valor de la casilla de verificación sin disparar su caso CheckChanged:
check1.Checked = true;
continuación, volver a suscribirse:
check1.CheckChanged += check1_CheckChanged;
[EDIT: March 29, 2012]
El problema con el enfoque de Tanvi es lo necesario para disfrutar de toda fuente de comprobación manual o desactive. No es que haya demasiados (solo al hacer clic con el mouse y al presionar la barra espaciadora), pero debe considerar invocar un evento refactorizado desde MouseClick y KeyUp (detectando la barra espaciadora)
Es más ordenado para un CheckBox (cualquier control para eso importa) para ser independiente de la fuente de entrada del usuario (teclado, mouse, etc.), así que para esto solo haré que la configuración programática de CheckBox sea realmente programática. Por ejemplo, se puede envolver el ajuste programático de la propiedad a un método de extensión:
static class Helper
{
public static void SetCheckProgrammatically(
this CheckBox c,
EventHandler subscribedEvent, bool b)
{
c.CheckedChanged -= subscribedEvent; // unsubscribe
c.Checked = b;
c.CheckedChanged += subscribedEvent; // subscribe
}
}
Con este enfoque, el código puede responder perfectamente a la entrada de la entrada del ratón y el teclado de tanto usuario a través de un evento solamente, es decir, a través de CheckChanged. No hay duplicación de código, no es necesario suscribirse a múltiples eventos (por ejemplo, teclado, marcar/desmarcar CheckBox presionando la barra espaciadora)
Me gusta esta solución, pero si hay varios codificadores en un proyecto determinado, ¿no sería necesario que todos se retiraran cada vez que cambiaran esta propiedad? – Coops
envuélvalo con propiedades de extensión, er .. métodos de extensión. p.ej. check1.SetCheckedRaw (booleanHere) –