C# Winforms 复选框不指示焦点

问题描述 投票:0回答:2

如果复选框是 Tab 键顺序中的第一个控件 (0),则并不表示在显示表单时它具有焦点。它确实具有焦点,您可以通过按空格键来选中/取消选中控件来演示这一点。如果您先按 Tab 键,然后按 Shift-Tab 键返回到该复选框,则标签会出现轮廓以指示焦点。通过创建带有复选框、文本框和按钮控件的新表单,可以轻松进行测试。 Tab 键顺序设置为该顺序。启动形式。不会有任何迹象表明该复选框已获得焦点。通过 Tab 键浏览控件,当您返回到文本框时,它将显示出轮廓。我尝试以 Load 和 Shown 方法的形式使用 Control.Focus() 和 Control.Select() 以编程方式设置焦点。

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

c# winforms checkbox
2个回答
15
投票

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

从Windows 2000开始,焦点矩形和带下划线的助记符默认被隐藏了

。直到您开始使用键盘界面与程序交互时,它们才会显示。只需按 Alt 键即可让它们出现。所以实际上是使用 TabShift+Tab

这个想法是减少Windows中的视觉噪音,即菜单和窗口中的焦点指示器和访问键下划线。从美学角度来看,这些东西会分散注意力并令人生畏。从功能上讲,它们仅在您通过键盘导航时才有用。当您只使用鼠标时,它们不会增加显着的价值。事实上,它们常常是多余的。

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

[…]

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

所以你没有做错任何事。
Select

Focus
或等效项的编程使用不会使焦点矩形显示。控件
已经
集中。 你只能做两件事:

    更改系统设置,以便焦点指示器
  1. 始终

    显示。由于这是一个全局设置,因此它只能由最终用户操作,而不是由您的应用程序操作。因此,无需调用API函数即可完成此操作,只需访问控制面板即可。

  2. 重写控件的绘制行为并强制它绘制焦点指示器,无论系统认为它应该做什么。您可以通过完全由所有者绘制控件来完成此操作,但使用此控件类可能会更容易:
  3. public class ForcedFocusCheckBox : CheckBox { protected override bool ShowFocusCues { get { return true; } } }

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


0
投票

但是如果我不知道焦点在哪里,我只能猜测。

© www.soinside.com 2019 - 2024. All rights reserved.