Ich erstelle ein kleines Spiel, das Spiel wird auf einem Panel auf einem Windows-Formular gedruckt. Jetzt möchte ich das Keydown-Ereignis erfassen, um zu sehen, ob es die Pfeiltasten gedrückt hat, das Problem ist jedoch, dass ich nicht scheinen kann, um es zu erfassen.C# versucht, das KeyDown-Ereignis auf einem Formular zu erfassen
Lassen Sie mich erklären, auf dem Formular habe ich 4 Tasten und verschiedene andere Bedienelemente und wenn der Benutzer zum Beispiel eine der Tasten drücken (um ein Spielereignis auszulösen) dann hat die Taste den Fokus und ich kann die Bewegungen nicht erfassen mit den Pfeiltasten.
Ich habe versucht, so etwas wie
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());
}
}
und dann, wenn die Form-Taste gedrückt Ereignisses gedrückt wurde, ich verwendet, um dieses
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
KeyDown(e);
}
ich auch für die Tasten und die verschiedenen anderen Steuerelemente auf der addierte keydown Windows Form, aber ich bekomme keine Antwort zurück. Ich habe einen Breakpoint innerhalb der Funktion eingerichtet, um zu sehen, ob er aufgerufen wird, aber dieser Breakpoint niemals auslöst?
Irgendwelche Ideen?
Am optimalsten war es, ein generelles KeyDown-Ereignis auszulösen (unabhängig davon, welches Steuerelement gerade den Fokus hat) und dann die KeyDown-Methode aufzurufen.
Es ist semi-arbeiten, jetzt bekomme ich das Keydown-Ereignis, aber wenn ich die Tasten drücke, werden sie immer noch fokussiert und dann funktioniert es nur, wenn ich die obere Pfeiltaste drücke, bis sie alle durchläuft und sie den Fokus verlieren. – Patrick
Wie fangen Sie die KeyDown-Ereignisse "Keys.Left" und "Keys.Right"? –
Ich bearbeitete meine Antwort zu verweisen IsInputKey-Methode –