如果复选框是 Tab 键顺序中的第一个控件 (0),则并不表示在显示表单时它具有焦点。它确实具有焦点,您可以通过按空格键来选中/取消选中控件来演示这一点。如果您先按 Tab 键,然后按 Shift-Tab 键返回到该复选框,则标签会出现轮廓以指示焦点。通过创建带有复选框、文本框和按钮控件的新表单,可以轻松进行测试。 Tab 键顺序设置为该顺序。启动形式。不会有任何迹象表明该复选框已获得焦点。通过 Tab 键浏览控件,当您返回到文本框时,它将显示出轮廓。我尝试以 Load 和 Shown 方法的形式使用 Control.Focus() 和 Control.Select() 以编程方式设置焦点。
如何在表单启动时使复选框看起来具有焦点?
这是标准行为。正如您所指出的,由于该控件是 Tab 键顺序中的第一个控件并且可以获取焦点,因此当第一次显示表单时,它实际上是焦点。 问题是,
从Windows 2000开始,焦点矩形和带下划线的助记符默认被隐藏了。直到您开始使用键盘界面与程序交互时,它们才会显示。只需按 Alt 键即可让它们出现。所以实际上是使用 Tab 和 Shift+Tab。
这个想法是减少Windows中的视觉噪音,即菜单和窗口中的焦点指示器和访问键下划线。从美学角度来看,这些东西会分散注意力并令人生畏。从功能上讲,它们仅在您通过键盘导航时才有用。当您只使用鼠标时,它们不会增加显着的价值。事实上,它们常常是多余的。为什么是现在?每件好事都必须从某个地方开始。 Windows 会看起来更干净、更简单。
[…]
当然,当用户演示键盘导航时,键盘指示灯会回来。指示器将适当地出现和消失。最后,如果您根本不喜欢这种行为,您可以从显示控制面板禁用它。
所以你没有做错任何事。
Select
或
Focus
或等效项的编程使用不会使焦点矩形显示。控件已经集中。 你只能做两件事:
显示。由于这是一个全局设置,因此它只能由最终用户操作,而不是由您的应用程序操作。因此,无需调用API函数即可完成此操作,只需访问控制面板即可。
public class ForcedFocusCheckBox : CheckBox
{
protected override bool ShowFocusCues
{
get { return true; }
}
}
但是如果我不知道焦点在哪里,我只能猜测。