在表单上我有 2 个标签和一个按钮。
我的游戏在其中一个标签中进行,但我遇到了问题。玩家使用“WASD”和箭头键玩这个游戏。但是,当玩家第一次使用箭头键时,焦点会放在 Button 上,并且用户无法再使用箭头键。这是很明显的,因为按下箭头键后按钮周围立即出现蓝色轮廓。
有什么办法可以防止这种情况发生吗?同时仍然可以用玩家的鼠标点击按钮?虽然这根本不难,但我想避免重新绑定控件。
我尝试将 Button 的
TabStop
属性更改为 false,更改 TabIndex
的顺序,不出所料也没有解决问题。
我知道是 Button 导致了问题,因为 Button 实际上是我的表单上唯一的可交互对象(传统意义上的?),说 Windows 表单不需要具有始终保持焦点的事物。
Google 搜索了这个问题,但我没有找到任何专门解决此问题的内容,感谢任何帮助!
默认情况下可以选择按钮控制。
如果它是表单上唯一的控件,则该 UI 元素将成为 ActiveControl 并获得焦点。
如果您在表单中设置了
KeyPreview = true
,并且正在处理PreviewKeyDown
,您将在第一个输入键上收到通知,然后唯一可聚焦的控件(您的按钮)将成为ActiveControl
。如果您不希望按钮控件吃掉按键,或者窃取其他控件的焦点(例如,用作虚拟键盘的按键时),我通常用自定义按钮替换标准按钮一个。
这个自定义按钮只是设置一个样式来阻止它获得焦点,同时保留所有其他功能:
public class ButtonNoFocus : Button {
public ButtonNoFocus() {
SetStyle(ControlStyles.Selectable, false);
}
}
如果您将此类添加到项目中(您可以将其添加到表单本身),然后在表单的设计器文件中将类型 Button
的所有实例替换为
ButtonNoFocus
,您的
PreviewKeyDown
处理程序将再次工作