C#Winforms复选框未指示焦点

本文关键字:焦点 指示 复选框 C#Winforms | 更新日期: 2023-09-27 17:58:13

如果复选框是选项卡顺序(0)中的第一个控件,则在显示表单时不会指示它具有焦点。事实上,它确实有焦点,您可以通过点击空格键来选中/取消选中控件来演示。如果您按tab键,然后按shift键返回复选框,则标签将被勾勒出来以指示焦点。通过创建一个带有复选框、文本框和按钮控件的新表单,可以轻松进行测试。选项卡顺序设置为该顺序。启动窗体。不会显示复选框有焦点。Tab键控制,当您返回到文本框时,它将被勾勒出来。我尝试过使用Control以编程方式设置焦点。Focus()和Control。在Load和Shown方法形式中选择()。

当表单启动时,如何使复选框看起来有焦点?

C#Winforms复选框未指示焦点

这是标准行为。正如您所指出的,由于控件是选项卡顺序中的第一个控件,并且可以获得焦点,因此当表单首次显示时,它实际上是

问题是,自Windows 2000以来,焦点矩形和带下划线的助记符默认情况下都是隐藏的。在您开始使用键盘界面与程序交互之前,它们不会显示。只需按下Alt+kbd>键就足以使它们出现。实际上,使用选项卡Shift+<kbd]选项卡>也是如此。

这个想法是为了减少Windows中的视觉噪音,即菜单和窗口中的焦点指示器和访问键下划线。从美学上讲,这些东西令人分心和恐惧。从功能上讲,只有当您使用键盘导航时,它们才有用。当你只是使用鼠标时,它们不会增加显著的价值。事实上,它们往往是多余的。

为什么是现在?每一件好事都必须从某个地方开始。Windows将看起来更干净、更简单。

[…]

当然,当用户演示键盘导航时,键盘指示器会返回。指示器将适当地出现和消失。最后,如果您根本不喜欢这种行为,可以从"显示"控制面板禁用它。

所以你没有做错什么。SelectFocus或等效程序的编程使用不会使焦点矩形显示出来。控件已聚焦。

你只能做两件事:

  1. 更改系统设置,使焦点指示器始终显示。由于这是一个全局设置,因此只能由最终用户操作,而不能由应用程序操作。因此,不需要调用API函数来完成此操作,只需访问控制面板即可。

  2. 覆盖控件的绘制行为,并强制它绘制焦点指示器,而不管系统认为它应该做什么。你可以通过完全由所有者绘制控件来实现这一点,但只使用这个控件类可能更容易:

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

但老实说,这两件事你都不应该做。这是一个标准的平台约定。所有内置对话框都会发生同样的情况。如果用户还不知道,他或她可能不会进行太多键盘交互,他们也不会期望首先按下空格键来切换您的复选框。他们只会用鼠标。