我正在創建一個小遊戲,遊戲被打印到窗體上的面板上。現在我想捕獲keydown事件來查看它是否被按下的箭頭鍵,但問題是我似乎無法捕獲它。C#試圖捕獲表單上的KeyDown事件
讓我解釋一下,我有4個按鈕和各種其他控件的形式,如果用戶按下其中一個按鈕(觸發遊戲事件),那麼按鈕有焦點,我無法捕捉到運動用箭頭鍵。
我想是這樣
private void KeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Left)
{
game.MovePlayer(DonutWarsLibrary.GameObjects.Direction.E);
game.DrawObjects(panel1.CreateGraphics());
}
else if (e.KeyCode == Keys.Right)
{
game.MovePlayer(DonutWarsLibrary.GameObjects.Direction.W);
game.DrawObjects(panel1.CreateGraphics());
}
else if (e.KeyCode == Keys.Up)
{
game.MovePlayer(DonutWarsLibrary.GameObjects.Direction.N);
game.DrawObjects(panel1.CreateGraphics());
}
else if (e.KeyCode == Keys.Down)
{
game.MovePlayer(DonutWarsLibrary.GameObjects.Direction.S);
game.DrawObjects(panel1.CreateGraphics());
}
}
,然後按下形式鍵按下事件的時候,我用這個
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
KeyDown(e);
}
我還添加了的keydown上的按鈕和其他各種控制窗體窗體,但我沒有得到任何迴應。我在函數內部設置了一個斷點來查看它是否被調用,但是該斷點從不觸發?
任何想法?
最理想的是有一個觸發的常規KeyDown事件(不管當前有什麼焦點),然後調用KeyDown方法。
這是半工作,現在我得到了keydown事件,但是當我按下按鈕時,他們仍然變得專注,然後它停止工作,除非我按頂部的箭頭鍵,直到它循環通過它們,他們鬆散的焦點。 – Patrick 2009-08-19 10:46:13
你如何捕捉「Keys.Left」和「Keys.Right」KeyDown事件? – 2009-08-19 13:23:27
我編輯了我的答案以引用IsInputKey方法 – 2009-08-19 13:44:22