我正在创建一个小游戏,游戏被打印到Windows窗体上的面板上.现在我想捕获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());
}
}
Run Code Online (Sandbox Code Playgroud)
然后当按下表单按键事件时,我使用了这个
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
KeyDown(e);
}
Run Code Online (Sandbox Code Playgroud)
我还为Windows窗体上的按钮和各种其他控件添加了keydown,但我没有收到任何回复.我在函数内部设置了一个断点,看它是否被调用,但该断点永远不会触发?
有任何想法吗?
最优化的是具有触发的通用KeyDown事件(无论当前具有什么焦点的控件),然后调用KeyDown方法.