Pracuję nad pongiem w języku C # i napotkałem problem. Mam włączony KeyPreview, a oto mój kod
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;
}
}
Po naciśnięciu dowolnego klawisza nic się nie dzieje. Tylko naciśnięcie klawisza działa, jeśli testuje warunek dla (char) Keys.Enter. Dlaczego to? Jak zmusić formularz do przyjęcia KeyPress dla kluczy innych niż enter?
Odpowiedzi:
3 dla odpowiedzi № 1Zamiast tego spróbuj zastąpić metodę KeyDown:
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);
}
Zobacz także Jaka jest różnica między KeyDown i KeyPress w .NET?
-1 dla odpowiedzi № 2
Zdarzenie KeyPress działa, gdy fokus jest aktywny. Zdarzenie keydown zawsze działa. => przechwytuje zdarzenie keydown