我正在用C#制作乒乓球,我遇到了一个问题。我有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获取除了输入之外的其他键?
答案 0 :(得分:3)
尝试改写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);
}
另见What's the difference between KeyDown and KeyPress in .NET?
答案 1 :(得分:-1)
当控件具有焦点时,KeyPress事件起作用。 keydown活动总是有效。 =>拦截keydown事件