Ich arbeite daran, Pong in C # zu erstellen, und ich habe ein Problem gefunden. Ich habe KeyPreview und hier ist mein Code
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Up || e.KeyChar == (char)Keys.W) {
picPaddle.Top -= 10;
}
else if (e.KeyChar == (char)Keys.Down || e.KeyChar == (char)Keys.S) {
picPaddle.Top += 10;
}
}
Wenn ich eine der Tasten drücke, passiert nichts. Ein Tastendruck funktioniert nur, wenn die Bedingung für (char) Keys.Enter getestet wird. Warum ist das? Wie kann ich dafür sorgen, dass das Formular KeyPress für andere Tasten als Eingabe verwendet?
Antworten:
3 für die Antwort № 1Versuchen Sie stattdessen die Methode KeyDown zu überschreiben:
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.W) {
picPaddle.Top -= 10;
} else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.S) {
picPaddle.Top += 10;
}
base.OnKeyDown(e);
}
Siehe auch Was ist der Unterschied zwischen KeyDown und KeyPress in .NET?
-1 für die Antwort № 2
Das KeyPress-Ereignis funktioniert, wenn das Steuerelement den Fokus hat. Das Keydown-Ereignis funktioniert immer. => das Keydown-Ereignis abfangen