Sodele.. im
vorherigen Thread habe ich meine eigene ComboBox abgeleitet, weil die normale Box keinen FlatStyle hatte und auch freie Eingaben erlaubte, was ich hier nicht brauchen kann.
Dort ist auch ein Screenshot von dem Formular, auf dem die Box eingesetzt wird.
Nun wirds tricky: Eine Eingabe in einem beliebigen Feld (und auch in dieser Combobox) soll das Formular in eine Zustand versetzen, der EditMode heisst. Will heissen die zwei Buttons rechts oben werden zu Speichern & Abbrechen und man kann keinen neuen Datensatz mehr auswählen bis der aktuell bearbeitete gespeichert wurde oder eben abgebrochen wurde.
Dazu hänge ich mich ins OnSelectionChanged Event der Box um das auszulösen. Funktioniert aus hervorragend. Nur wird nun halt jedes mal, wenn ich einen neuen Eintrag selektiere der Editmode aufgerufen. Um das bei der Initialisierung zu vermeiden verpasse ich jedem Control während der Initialisierung den String "INIT" als Tag und frage darauf ab. Auch hervorragend - bei allen Controls tut das auch.
Nur die ComboBox ärgert mich da wieder.
Während der Initialisierung mache ich folgendes:
Code:
cbxDivision.Tag = "INIT";
cbxDivision.SelectedIndex = cbxDivision.Items.IndexOf(myUser.Division.ToString());
cbxDivision.Tag = "";
Das interessante ist, dass der Index aber erst dann wirklich gesetzt wird, wenn sich das Control selber neu zeichnet - und eben nicht an der Stelle, wo es getzt wird
Nun bin ich auf die Idee gekommen und habe noch ein Flag eingeführt. In der SelectionChanged wird nun auch noch auf das weitere Flag geprüft. Dieses Flag setze ich im OnENTER Event.
Und nun dürft ihr dreimal raten: Vor dem Zeichen wird OnEnter ausgelöst, obwohl ich das Control gar nicht entere (ist gleich das erste Zeichnen vom Formular).
Wie kann ich nun vermeiden, dass ich beim Initialisiern von dem Control auch gleich in den Editmodus gehe oder genauer: WELCHES Event wird wirklich nur dann ausgelöst, wenn der User den Wert des Controls ändert und nicht, wenn sich das Control neu zeichnet?