Immer wenn ein Formular geöffnet wird, fokussiert das System automatisch eines der Steuerelemente für Sie. Soweit ich das beurteilen kann, ist das Steuerelement, das den Fokus erhält, das erste aktivierte Steuerelement in der Aktivierreihenfolge, gemäß dem Standardverhalten von Windows.
Die Frage ist, wie Sie dies zur Laufzeit ändern können, ohne die Tab-Reihenfolge dynamisch neu zu mischen. Zum Beispiel könnten einige Formulare die anfänglich fokussierte Steuerung basierend auf der Programmlogik variieren, um den Fokus auf die am besten geeignete Steuerung zu legen. Wenn Sie nur ein anderes Steuerelement in Ihrem OnLoad
-Handler fokussieren, wird die Standardlogik trotzdem ausgeführt und das Standardsteuerelement neu fokussiert.
Wenn Sie in C / C ++ schreiben und eine rohe Fensterprozedur oder MFC verwenden, können Sie 0 ( FALSE
) von Ihrem WM_INITDIALOG
-Handler, und die Standardfokussierungslogik wird übersprungen. Ich kann jedoch keine Möglichkeit finden, dies in Windows Forms zu tun. Das Beste, was ich mir ausgedacht habe, ist BeginInvoke
zu benutzen, um den Fokus zu setzen, nachdem die OnLoad
fertig ist, so:
Es muss einen richtigen Weg geben, um das zu tun - was ist das?
Nachdem ich durch Reflector geforscht habe, habe ich herausgefunden, was der "richtige" Weg ist: ContainerControl.ActiveControl . Dies kann über OnLoad (oder anderswo geschehen; siehe Dokumentation für Einschränkungen) und teilt direkt dem Framework mit, auf welches Steuerelement Sie fokussieren möchten.
Beispielverwendung:
%Vor%Dies scheint die sauberste und einfachste Lösung zu sein.