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