Wie wird festgelegt, welches Steuerelement beim Öffnen eines Formulars fokussiert werden soll?

8

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:

%Vor%

Es muss einen richtigen Weg geben, um das zu tun - was ist das?

    
Charlie 16.06.2009, 14:59
quelle

3 Antworten

13

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.

    
Charlie 16.06.2009, 20:27
quelle
1
%Vor%     
Robert Harvey 16.06.2009 15:03
quelle
0

Anstatt das OnLoad-Ereignis zu verwenden, können Sie nicht die Ereignisse Form.Activated oder Form.Shown verwenden, um zu sehen, ob sie nach dem Rendern des Kontrollfokus aufgerufen werden?

    
Adam Fox 16.06.2009 15:15
quelle

Tags und Links