Checkbox, Radiobutton Checked setzen ohne event?



  • Gibt es dafür möglichkeiten? Wenn ich das richtig getestes habe kann ich zwar den Zustand der beiden Sachen mit .Checked = (true/false) setzen aber es wird immer das CheckedChange event geworfen. Kann ich den Zustand auch setzen ohne das Event zu werfen?



  • Wieso sollte man sowas machen?



  • Da ich in einem RadioButton/Checkbox einen Wert darstelle der sein eigenes Event hat wenn es geändert wurde. Dummerweise hören da nun mehrere Checkboxen auf diesen Wert.

    Beispiel:

    Wert1 -> CheckBox1
    Wert1 -> CheckBox2

    CheckBox1 wird geklicked->CheckedChanged wird geworfen->CheckBox1 setzt einige Bits in Wert1 neu->Wert1Changed wird geworfen->CheckBox1 merkt das sich Wert 1 geändert hat und setzt seinen CheckedStatus neu->CheckedChanged wird geworfen (Fortfahren beim zweiten punkt).

    Wenn ich es haarklein ausprogrammiere kriege ich zumindest mit ob ein setzen nötig ist und kann dann abbrechen. Auf jedenfall kriege ich unnötig viele CheckedChange und prüfungen rein die ich nicht hätte wenn CheckBox1 und CheckBox2 ihren Checked status ändern könnten ohne wieder CheckedChanged zu werfen.



  • Fedaykin schrieb:

    Kann ich den Zustand auch setzen ohne das Event zu werfen?

    Nein.



  • Oki dann muss ich doch auf ein eigenes Event zurückgreifen bei dem ich entscheide wann es geworfen wird. Seltsam das es da nichts von haus aus gibt.



  • Merke dir doch einfach das es ein "SelfChange" ist und nicht vom Benutzer kommt.



  • Du könntest auch ein eigenes CheckBox-Control erstellen (d.h. von CheckBox ableiten) und dann innerhalb von der überschriebenen OnCheckedChanged nicht die Basismethode aufrufen (welche dann das Ereignis 'CheckedChanged' werfen würde).



  • Naja ich habs nun mit einen eigenen Event gemacht, ich melde mich auf CheckedChange an und rufe dann je nachdem ob ich das will den eigenen EventHandler auf oder nicht. Trotzdem Danke für die vielen Hinweise.



  • Du könntest auch einfach bevor du den Wert setzt den EventHandler "aushängen" also deregistrieren:

    checkbox1.OnCheckChanged -= OnCheckChangedEventhander;
    checkbox1.checked = value;
    checkbox1.OnCheckChanged += OnCheckChangedEventhander;
    

Anmelden zum Antworten