在整个表单上按键,而不仅仅是一个对象

本文关键字:不仅仅是 一个对象 表单 | 更新日期: 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事件

相关文章: