die Veranstaltung abmelden, bevor Sie eingestellt:
check1.CheckChanged -= check1_CheckChanged;
dann können Sie programmatisch den Wert ohne die Checkbox gesetzt seine CheckChanged Ereignis Brennen:
check1.Checked = true;
dann erneut abonnieren:
check1.CheckChanged += check1_CheckChanged;
[EDIT: 29. März 2012]
Das Problem mit Tanvi Ansatz ist, dass Sie benötigen alle Quelle manuelle Überprüfung zu fangen oder deaktivieren. Nicht, dass es zu viele gibt (es ist nur durch Mausklick und vom Benutzer durch Drücken der Leertaste), aber Sie müssen in Erwägung ziehen, ein refaktoriertes Ereignis von MouseClick und KeyUp (Erkennung der Leertaste)
Es ist besser für eine CheckBox (keine Kontrolle für Das ist wichtig, um von der Quelle der Benutzereingabe (Tastatur, Maus, usw.) unabhängig zu sein, deshalb werde ich die programmatische Einstellung von CheckBox nur wirklich programmatisch machen. Zum Beispiel können Sie die programmatische Einstellung der Eigenschaft auf eine Erweiterungsmethode wickeln:
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
}
}
Mit diesem Ansatz kann Ihr Code reagiert ordentlich sowohl Maus der Benutzereingabe und Tastatureingabe über ein Ereignis nur, das heißt über CheckChanged. Keine Doppelung von Code, keine Notwendigkeit, mehrere Ereignisse zu abonnieren (zB Tastatur, Aktivieren/Deaktivieren der CheckBox durch Drücken der Leertaste)
Ich mag diese Lösung, aber wenn es mehrere Programmierer in einem bestimmten Projekt gibt, dann müsste sich nicht jeder jedes Mal abmelden, wenn er diese Eigenschaft ändert? – Coops
wrap es mit Erweiterungseigenschaften, er .. Extension-Methoden. z.B. check1.SetCheckedRaw (booleanHere) –