当前位置: 首页 > 知识库问答 >
问题:

键盘处理程序中的回车键出现问题

经昱
2023-03-14

我从C#开始,第一个项目是做计算器。我想为我的GUI提供一个键盘处理程序,它可以执行与我之前所做的按钮处理程序相同的操作。问题是当我进入“回车”键时。这就是我的空虚:

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

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

知道吗?谢谢:)

共有2个答案

陈欣荣
2023-03-14

您需要设置<code>键按EventArgs。将属性处理为

因此,这告诉操作系统,或正常的窗口消息功能(WndProc)忽略按键,因为它已经被处理。请参见:https://msdn . Microsoft . com/en-us/library/system . windows . forms . keypress eventargs . handled(v = vs . 110)。文件

所以喜欢:

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;
  }
} 
宋伯寅
2023-03-14

重写窗体的 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);
    }
 类似资料:
  • 3、键盘中断的处理过程 当用户按键时,键盘接口会得到一个代表该按键的键盘扫描码,同时产生一个中断请求。键盘中断服务程序先从键盘接口取得按键的扫描码,然后根据其扫描码判断用户所按的键并作相应的处理,最后通知中断控制器本次中断结束并实现中断返回。 若用户按下双态键(如:Caps Lock、Num Lock和Scroll Lock等),则在键盘上相应LED指示灯的状态将发生改变; 若用户按下控制键(如:

  • 如何强制GLFW管理每秒60次以上的键盘回调?也就是说,我希望GLFW的键盘处理速度取决于实际的FPS。这可能吗?

  • 我目前有以下情况: 我想让我的应用程序监听用户输入。首先,我使用了一个看不见的文本字段,但这搞砸了我的设计,我认为它不够复杂。因此,我现在尝试在我的上部流程窗格上创建一个onKeyPressed事件处理程序,如下所示: 这仅适用于纯文本和数字。但是,一旦我按Enter键,我就会收到以下错误: 我已经想到了: 上面的FlowPane没有焦点,但我给了它焦点,但没有结果。 回车键没有被识别,这可能是真

  • 对于示例代码,我用200个随机数字的序列替换了文本:在键盘上上下按压时,条形图会滚动,而屏幕的另一半应该显示每次按下R键时随机选择的200个数字中的一个,或者在按下H键时显示一个“你好”的文本。 在一些帮助下,我能够使我的数字正确地显示在屏幕上,但我不确定如何使这两个不同的按键交互工作,我需要在两者之间周旋:随机数和文本。 我试过这样做,但我似乎不能让它在文本部分起作用:

  • 我正在制作一个计算器来学习写作,所以我把自己的数字按钮放在屏幕上,我想防止软键盘出现。 这是我的repo:https://github.com/vitor-ramos/CalculadorCompose 我在TextFieldImpl中注意到。kt有一个显示键盘的修改器,所以我试图克隆代码并删除这行:我知道这样复制代码不是个好主意,但我想尝试一下,结果失败了。正如您在下面的原始代码中看到的,有一个

  • 我的代码是: 在上面的代码中,mBooleanLoginDone是一个布尔变量,指示用户是否登录。我希望快捷键Ctrl和T仅在用户成功登录时起作用,但现在我还没有登录,快捷键也起作用。我怎样才能解决它?有什么想法吗?