2015-11-30 126 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

不,不會工作。現在它已經從一開始就將焦點集中在了按鈕上。 –