Mar*_*ark 6 c# checkbox winforms
如果复选框是选项卡顺序(0)中的第一个控件,则在显示表单时它不表示它具有焦点.确实,它确实有焦点,您可以通过按空格键来检查/取消选中控件来演示.如果选中,则使用shift-tab返回复选框,标签将标出轮廓以指示焦点.通过创建带有复选框,文本框和按钮控件的新表单,可轻松测试.Tab键顺序设置为该顺序.启动表格.没有迹象表明该复选框具有焦点.通过控件选项卡,当您返回文本框时,它将被概述.我已尝试使用Control.Focus()和Control.Select()以Load和Shown方法的形式以编程方式设置焦点.
如何在启动表单时使复选框显示为焦点?
Cod*_*ray 11
这是标准行为.正如您所指出的,由于控制是在选项卡顺序中的第一个和可以采取的焦点,它是真正的重点时,第一个显示的形式.
问题是,自Windows 2000以来,默认情况下隐藏了焦点矩形和带下划线的助记符.在您使用键盘界面开始与程序交互之前,它们不会显示.只需按下Alt按键就足以让它们出现.所以实际上是使用Tab和Shift+ Tab.
这个想法是减少Windows中的视觉噪音,即在菜单和窗口中聚焦指示器和访问键下划线.在美学上,这些东西令人分心和恐惧.从功能上讲,它们仅在您通过键盘导航时才有用.当您刚刚使用鼠标时,它们不会增加显着的价值.事实上,它们往往是多余的.
为什么现在?每件好事都必须从某个地方开始.Windows看起来更干净,更简单.
[...]
当然,当用户进行键盘导航演示时,键盘指示灯将会返回.指标会出现并适当消失.最后,如果您根本不喜欢这种行为,可以从"显示"控制面板中禁用它.
所以你没有做错任何事.没有计划使用Select或Focus或相当于将要作出这样的焦点矩形显示出来.控件已经集中.
你可能只做两件事:
更改系统设置,以便始终显示焦点指示.由于这是一个全局设置,它应该只由最终用户操纵,而不是由您的应用程序操纵.因此,无需调用API函数即可,只需访问控制面板即可.
覆盖控件的绘制行为并强制它绘制焦点指示器,无论系统认为它应该做什么.您可以通过完全所有者绘制控件来完成此操作,但是使用此控件类可能更容易:
public class ForcedFocusCheckBox : CheckBox
{
protected override bool ShowFocusCues
{
get { return true; }
}
}
Run Code Online (Sandbox Code Playgroud)但老实说,你不应该做这些事情.这是一个标准的平台惯例.所有内置对话框都会发生同样的事情.如果用户还不知道,他或她可能没有做太多的键盘交互,他们也不会期望按空格键来切换你的复选框.他们只会使用鼠标.