2016-07-21 6 views
5

Wenn ein Kontrolle-Kästchen das erste Steuerelement in der Aktivierreihenfolge (0) ist, zeigt es nicht an, dass es Fokus hat, wenn das Formular angezeigt wird. Es hat tatsächlich den Fokus, den Sie demonstrieren können, indem Sie die Leertaste drücken, um das Steuerelement zu aktivieren oder zu deaktivieren. Wenn Sie auf die Registerkarte "Tab" und dann auf "Shift" klicken, um zum Kontrollkästchen zurückzukehren, wird die Beschriftung als Fokus angezeigt. Einfach testbar, indem Sie ein neues Formular mit Kontrollkästchen, Textfeldern und Schaltflächen erstellen. Die Tabulatorreihenfolge wird auf diese Reihenfolge festgelegt. Formular starten Es gibt keinen Hinweis, dass das Kontrollkästchen den Fokus hat. Tab-wenn-Steuerelemente und wenn Sie zum Textfeld zurückkehren, wird es umrissen. Ich habe versucht, den Fokus programmgesteuert mit Control.Focus() und Control.Select() in der Form Load und Shown Methoden zu setzen.C# Winforms Checkbox, die Fokus nicht anzeigt

Wie wird das Kontrollkästchen aktiviert, wenn das Formular gestartet wird?

Antwort

6

Dies ist Standardverhalten. Wie Sie bereits erwähnt haben, ist das Steuerelement tatsächlich fokussiert, wenn das Formular zuerst angezeigt wird, da das Steuerelement das erste in der Aktivierreihenfolge ist und den Fokus verwenden kann.

Das Problem ist, dass since Windows 2000, the focus rectangles and underlined mnemonics have been hidden by default. Sie werden nicht angezeigt, bis Sie über die Tastaturschnittstelle mit dem Programm interagieren. Drücken Sie einfach die Alt Taste ist genug, um sie erscheinen zu lassen. So wird tatsächlich verwendet Tab und Shift + Tab.

Die Idee ist, visuelles Rauschen in Windows zu reduzieren, nämlich Fokusindikatoren und Zugriffstastenunterstriche in Menüs und Fenstern. Ästhetisch sind diese Dinge störend und einschüchternd. Funktional sind sie nur nützlich, wenn Sie mit der Tastatur navigieren. Sie fügen keinen signifikanten Wert hinzu, wenn Sie nur die Maus verwenden. In der Tat sind sie oft überflüssig.

Warum jetzt? Jede gute Sache muss irgendwo beginnen. Windows wird sauberer und einfacher aussehen.

[& hellip;]

Natürlich kommen die Tastaturanzeigen zurück, wenn es eine Demonstration der Navigation mit der Tastatur durch den Benutzer ist. Die Indikatoren erscheinen und verschwinden entsprechend. Wenn Sie das Verhalten schließlich überhaupt nicht mögen, können Sie es über das Kontrollfeld "Anzeige" deaktivieren.

Sie tun also nichts falsch. Keine programmatische Verwendung von Select oder Focus oder gleichwertigem wird dazu führen, dass das Fokusrechteck angezeigt wird. Das Steuerelement ist bereits konzentriert.

Es gibt nur zwei Dinge, die Sie vielleicht tun könnte:

  1. Ändern der Systemeinstellung, so dass Fokus Indikatoren sind immer gezeigt. Da dies eine globale Einstellung ist, sollte es nur vom Endbenutzer und nicht von Ihrer Anwendung manipuliert werden. Daher müssen Sie dafür keine API-Funktion aufrufen. Rufen Sie einfach das Control Panel auf.

  2. Überschreibe das Zeichenverhalten des Steuerelements und erzwinge das Zeichnen des Fokusindikators, unabhängig davon, was das System davon hält.Sie können dies tun, indem sie vollständig inhaber zeichnen die Kontrolle, aber es ist wahrscheinlich einfacher, nur anstatt diese Steuerklasse verwendet wird:

    public class ForcedFocusCheckBox : CheckBox 
    { 
        protected override bool ShowFocusCues 
        { 
         get { return true; } 
        } 
    } 
    

Aber ehrlich gesagt, Sie sollten auch nicht diese Dinge tun. Dies ist eine Standardplattformkonvention. Dasselbe gilt für alle integrierten Dialoge. Wenn ein Benutzer es nicht bereits kennt, macht er oder sie wahrscheinlich nicht viel Tastaturinteraktion, und sie erwarten nicht, die Leertaste zu drücken, um Ihre Checkbox an erster Stelle zu schalten. Sie werden nur die Maus benutzen.

+0

Große Antwort und Erklärung! Ich portiere eine Anwendung von Unix-COBOL und habe Beschwerden, dass der Benutzer nicht weiß, welche Kontrolle aktiv ist, und sie sind SEHR widerstrebend, um nach einer Maus zu greifen, da sie sie verlangsamt. Sie erwärmen sich gerade auf die Idee, die Leertaste zu verwenden, um Checkboxen auszuwählen und nicht nach den J/N-Antworten zu fragen ... –