Я создаю небольшую игру, игра печатается на панели в форме окна. Теперь я хочу захватить событие 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.