/ / KeyPress na całej formie, a nie tylko na jednym obiekcie? - c #, .net, zdarzenia, naciśnięcie klawisza

KeyPress na całej formie, a nie tylko jednym obiekcie? - c #, .net, zdarzenia, naciśnięcie klawisza

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

Zamiast 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