/ / KeyPress für das gesamte Formular, nicht nur ein Objekt? - c #, .net, Ereignisse, Tastendruck

KeyPress auf gesamtes Formular, nicht nur ein Objekt? - c #, .net, Ereignisse, Tastendruck

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 № 1

Versuchen 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