键盘处理程序中的 enter/return 键出现问题

Trouble with enter/return key in keyboard handler

我从 C# 开始,我正在做一个计算器作为我的第一个项目。我想要一个用于我的 GUI 的键盘处理程序,它可以执行与我之前执行的按钮处理程序相同的操作。问题是当我到达 "enter" 键时。那是我的空白:

private void keyboardHandler(object sender, KeyPressEventArgs e){
  char keyPressed = e.KeyChar;
  if (keyPressed >= (char)Keys.D0 && keyPressed <= (char)Keys.D9)
  {
    //Some stuff
  }
  else if (keyPressed == (char)Keys.Back)
  {
    //More stuff
  }
  else if (keyPressed == (char)Keys.Enter || keyPressed == (char)Keys.Return)
  {
    this.operate();
    operator = operation.START;
  }
} 

问题是,如果我按下回车键,它会抛出处理程序事件,但它也会按下按钮,就像我点击它一样。这是一张图片:

有什么想法吗?谢谢:)

您需要将 KeyPressEventArgs.Handled 属性 设置为 true

因此,这会告诉操作系统或正常的 window 消息传递函数 (WndProc) 忽略按键,因为它已经被处理过了。参见:https://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.handled%28v=vs.110%29.aspx

很喜欢:

private void keyboardHandler(object sender, KeyPressEventArgs e){
  char keyPressed = e.KeyChar;
  if (keyPressed >= (char)Keys.D0 && keyPressed <= (char)Keys.D9)
  {
    //Some stuff
  }
  else if (keyPressed == (char)Keys.Back)
  {
    //More stuff
  }
  else if (keyPressed == (char)Keys.Enter || keyPressed == (char)Keys.Return)
  {
    this.operate();
    operator = operation.START;
    e.Handled = true;
  }
} 

覆盖表单的 ProcessCmdKey 处理程序。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            this.operate();
            operator = operation.START;
            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }