Estoy creando un juego pequeño, el juego se imprime en un panel en un formulario de Windows. Ahora quiero capturar el evento de pulsación para ver si son las teclas de flecha que se han presionado, pero el problema es que parece que no puedo capturarlo.C# tratando de capturar el evento KeyDown en un formulario
Permítanme explicar, en el formulario tengo 4 botones y varios otros controles y si el usuario, por ejemplo, presiona uno de los botones (para activar un evento), el botón tiene foco y no puedo capturar los movimientos con las teclas de flecha.
he intentado algo así como
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());
}
}
y luego, cuando la tecla formulario abajo evento fue presionado, he utilizado este
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
KeyDown(e);
}
También he añadido keydown para los botones y los demás controles de la Windows forma, pero no estoy recibiendo ninguna respuesta. He configurado un punto de interrupción dentro de la función para ver si se está llamando, pero ¿ese punto de interrupción nunca se dispara?
¿Alguna idea?
Lo más óptimo fue tener un evento KeyDown general que desencadena (independientemente de qué control tenga foco actualmente) y luego llama al método KeyDown.
Es semi-trabajo, ahora recibo el evento de tecla, pero cuando presiono los botones, aún se enfocan y luego deja de funcionar a menos que presione la tecla de flecha superior hasta que pasa por todos y pierden el foco. – Patrick
¿Cómo atrapa los eventos KeyDown "Keys.Left" y "Keys.Right"? –
Edité mi respuesta para referirme al método IsInputKey –