在整个表单上按键,而不仅仅是一个对象
本文关键字:不仅仅是 一个对象 表单 | 更新日期: 2023-09-27 17:49:38
我正在用c#制作pong,我遇到了一个问题。我打开了KeyPreview,这是我的代码
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;
}
}
当我按任何键时,什么都没有发生。只有在测试(char)Keys.Enter的条件时,按键才会起作用。为什么会这样?我怎样才能使表单采取KeyPress键以外的输入?
尝试重写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);
}
也可以看到。net中KeyDown和KeyPress的区别是什么?
当控件有焦点时KeyPress事件工作。keydown事件总是有效的。=>拦截keydown事件