1

我正在用 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 键而不是输入键?

4

2 回答 2

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);
}

另请参阅.NET 中的 KeyDown 和 KeyPress 有什么区别?

于 2012-12-27T23:26:31.933 回答
-1

KeyPress 事件在控件具有焦点时起作用。keydown 事件始终有效。=> 拦截 keydown 事件

于 2012-12-27T23:54:52.923 回答