KeyPress在整个表单上,而不仅仅是一个对象?

时间:2012-12-27 23:18:59

标签: c# .net events keypress

我正在用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获取除了输入之外的其他键?

2 个答案:

答案 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事件