2015-11-30 99 views
0

如何防止如果用户按下其中一个箭头键,窗体上的按钮将被聚焦?
我正在编程一个小游戏,所以这会阻止用户移动。对于模糊的解释抱歉。通过箭头键点击防止按钮被聚焦

编辑:

球员是在它的图形一个PictureBox由移动:

private async void Form1_KeyDown(object sender, KeyEventArgs e) 
+0

应的按钮都集中?即你想让焦点总是保持形式而不是任何按钮? –

+0

@IvanStoev Jup,这将是我的期望,但你应该仍然能够随时按下他们。 –

+0

看到这个http://stackoverflow.com/questions/32823525/how-to-stop-pressing-button-using-keyboard-keys-like-spacebar-or-enter-c-shar/32825190#32825190 –

回答

1

在你Form.cs覆盖ProcessCmdKey这样的:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (!msg.HWnd.Equals(Handle) && 
     (keyData == Keys.Left || keyData == Keys.Right || 
      keyData == Keys.Up || keyData == Keys.Down)) 
      return true; 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

这是“WM_GETDLGCODE”的WinForms等价物?是的,我衷心赞同。 – Medinoc

2

处理这种情况的一种方法是设置form.KeyPreview = true(参见MSDN),然后处理在按键响应/ KeyDown事件处理程序的按键:报价MSDN的按键事件

仅在窗体级别处理键盘事件,而不是让其他控件接收键盘事件,设置将事件处理方法中的KeyPressEventArgs.Handled属性的 事件处理方法设置为true。

测试在您keysEvent箭头,管理交给他们处理你需要的方式和设定= true来避免违约行为(将焦点移至下一个控件)

+0

不,不会工作。现在它已经从一开始就将焦点集中在了按钮上。 –