Feedback

C# - Fokus setzen innerhalb eines EnabledChanged-Ereignisses

Veröffentlicht von am 3/3/2015
(0 Bewertungen)
Aufgabe
Wenn der Status eines Steuerelemtens von "Disabled" nach "Enabled" wechselt, soll es automatisch den Focus bekommen.
Der Lösungsansatz ist klar: das Ereignis "EnabledChanged" nutzen und mit "sender.Focus();" den Focus setzen.
Das Problem
Es funktioniert schlicht nicht (zuverlässig). Das Ereignis wird bereits ausgelöst, während sich der Status noch ändert. Der Abfrage von "Enabled" innerhalb des Ereignisses zeigt dabei lediglich den nächsten Zustand an, nicht aber den aktuell Erreichten.
Die Folge ist, das "Focus()" auf ein nicht aktives Steuerelement angewandt wird. Damit rutscht der Fokus weg.
Lösung
Die Aktivierung des Steuerelementes über das Formular in dem es liegt.
Anwendung
SetFocusedControl (MeinControl);
MeinControl.SetFocusedControl ();
// zum Einbinden in eine statische Klasse
// sonst das 'this' entfernen

static public void SetFocusedControl (this Control Ctrl) {
	((Form) Ctrl.TopLevelControl).ActiveControl = Ctrl;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!