【问题标题】:Enter key press in C#在 C# 中输入按键
【发布时间】:2020-07-24 14:32:34
【问题描述】:

我试过这段代码:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Convert.ToInt32(e.KeyChar) == 13) 
    {
        MessageBox.Show(" Enter pressed ");
    }
}

还有这个:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == Convert.ToChar(Keys.Enter))
    {
        MessageBox.Show(" Enter pressed ");
    }
}

还有这个:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == Keys.Enter)
    {
        MessageBox.Show(" Enter pressed ");
    }
}

但他们不工作......

当我写东西并按 Enter 时,它不起作用。它只会突出显示我的文字。

【问题讨论】:

  • 你的文本框 MultiLine == true 吗?
  • 让 Enter 键“突出显示文本”是一个了不起的技巧。描述 TextBox 的哪些属性在“属性”窗口中以粗体显示,以及您实现了哪些其他事件。
  • 我尝试了多行 false 和 true 它没有改变任何东西.... :( :(
  • 文本框属性粗体:行:字符串[]数组---位置和大小,标签索引:14 --名称-锚--自动完成自定义:集合(在集合内没有)自动完成模式建议自动完成来源:最近使用过的列表
  • 自动完成设置会导致此行为。如果您改用 KeyDown,您仍然可以检测到密钥。

标签: c# .net


【解决方案1】:

试试这个代码,可能会工作(假设是windows形式):

private void CheckEnter(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if (e.KeyChar == (char)13)
    {
        // Enter key pressed
    }
}

像这样注册活动:

this.textBox1.KeyPress += new 
System.Windows.Forms.KeyPressEventHandler(CheckEnter);

【讨论】:

  • 它现在可以工作了,谢谢...:D 我将自动完成模式更改为无:D
  • if (e.KeyChar == (char)Keys.Enter) 让我迂腐的一面微笑
  • 即使if (e.KeyChar == (Int32)Keys.Enter) 有效,我通常将枚举转换为 int
  • @sgissinger 为什么要将只有 2 个字节的东西转换为 4 个字节? e.KeyChar 是 char(2 个字节)而不是 Int32(4 个字节)。
  • @nashwan 你说得对,在这种情况下它没用。我说的是一般的枚举。例如,Keys.Shift 等于 65536,不能转换为 2 字节字符(或短字符)。
【解决方案2】:

你必须在 keydown 事件中尝试这个

这里是代码:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            MessageBox.Show("Enter pressed");
        }
    }

更新:

你也可以通过按键事件来做到这一点。

试试这个:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == Convert.ToChar(Keys.Return))
        {
            MessageBox.Show("Key pressed");
        }
    }

【讨论】:

  • @DoğaÖzkaracaabatlıoğlu 将表单键预览设为 true
  • Keys.Enter 代替 Key.Enter
  • KeyEventArgs 没有属性“Key”,因此第一个示例无法编译 - 它确实有“KeyCode”
  • 为什么是“必须”?在用户释放键之前按键触发,并且 keyup 可能会在不同的控件中触发(基于它应该做什么)
  • 如果你想阻止另一个事件也被注册以对 enter 键做出反应,你需要添加`e.Handled=true;` - 如果你想实现类似的东西,这很重要按 Enter 时执行“确定操作”。
【解决方案3】:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        MessageBox.Show("Enter Key Pressed");
    }
}

这使您可以选择所需的特定键,而无需查找键的字符值。

【讨论】:

    【解决方案4】:
    private void textBoxKontant_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Return)
                {
                    MessageBox.Show("Enter pressed");
                }
            }
    

    截图:

    【讨论】:

      【解决方案5】:

      KeyChar 是在寻找一个整数值,所以需要进行如下转换:

          private void Form1_KeyPress(object sender, KeyPressEventArgs e)
          {
              if (e.KeyChar == Convert.ToInt16(Keys.Enter))
              {
                  MessageBox.Show("Testing KeyPress");
              }
          }
      

      【讨论】:

      • 或者只使用13而不是Convert.ToInt16(Keys.Enter)),它不需要任何计算。作为替代方案,您可以使用 jQuery 插件来做到这一点
      【解决方案6】:

      您可以使用 Key_down 事件,而不是使用 Key_press 事件。你可以在下面找到这个
      双击此处后会自动显示此代码

      private void textbox1_KeyDown(object sender, KeyEventArgs e)
          {
      
           }
      

      问题已解决,请随意使用。

      private void textbox1_KeyDown(object sender, KeyEventArgs e)
          {
              if (e.KeyCode == Keys.Enter)
              {
                  MessageBox.Show(" Enter pressed ");
              }
           }
      

      【讨论】:

      • 这已经被很多人说过了,例如the second-highest rated answer for this question
      • 既然我们都来这里学习,我也贡献了一份力量。毕竟,我必须学会回答。回答完这个问题,我知道了很多。下一次,我一定会记住您的评论。
      【解决方案7】:
      private void TextBox1_KeyUp(object sender, KeyEventArgs e)
      {
           if (e.KeyCode == Keys.Enter)
           {
               MessageBox.Show("Enter pressed");
           }
       }
      

      为我工作。

      【讨论】:

        【解决方案8】:
        private void Input_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Return)
                {
                    MessageBox.Show("Enter pressed");
                }
            }
        

        这对我有用。

        【讨论】:

          【解决方案9】:

          你也可以通过按键事件来做到这一点。

           private void textBox1_EnterKeyPress(object sender, KeyEventArgs e)
          
           {
          
            if (e.KeyCode == Keys.Enter)
             {
               // some code what you wanna do
             }
          
          
          }
          

          【讨论】:

          • keypress e 参数的类型为 KeyPressEventArgs
          【解决方案10】:

          对我来说,这是最好的解决方案:

          private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
          {
              if (e.KeyData == Keys.Enter)
              {
                  MessageBox.Show("Enter key pressed");
              }
          }
          

          【讨论】:

            【解决方案11】:

            记住这一点

            Keys.ReturnKeys.Enter

            不同
            //Makes it easier to Type user and password and press Enter, 
            //Rather than using the mouse to Click the Button all the time
                private void Txt_Password_KeyDown(object sender, KeyEventArgs e)
                {
                    if(e.KeyCode == Keys.Return)
                    {
                        Btn_Login_Click(null, null);
                    }
                }
            

            希望这对某人有所帮助。

            【讨论】:

              【解决方案12】:
              private void Ctrl_KeyUp(object sender, KeyEventArgs e)
              {
                  if (e.KeyCode == Keys.Enter)
                  {
                      this.SelectNextControl((Control)sender, true, true, true, true);
                  }
              }
              

              选择所有需要的文本框;输入新的事件名称 Ctrl_KeyUp。

              通过 BTNT TV 观看 YouTube: https://www.bing.com/videos/searchq=c%23+how+to+move+to+next+textbox+after+enterkey&view=detail&mid=999E8CAFC15140E867C0999E8CAFC15140E867C0&FORM=VIRE

              【讨论】:

                【解决方案13】:

                您可以使用以下代码:

                abc_KeyDown(abc, new KeyEventArgs(Keys.Enter));
                

                【讨论】:

                  【解决方案14】:

                  试试这个:

                  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
                  {
                          switch (e.Key.ToString())
                          {
                                  case "Return":
                                          MessageBox.Show(" Enter pressed ");
                                          break;
                           }
                  }
                  

                  【讨论】:

                  • 我不确定这是否适用于具有 CurrentUICulture 和 CurrentCulture 而非英语的线程。
                  • 我收到此错误:错误 1“System.Windows.Forms.KeyPressEventArgs”不包含“Key”的定义,并且没有扩展方法“Key”接受“System.Windows”类型的第一个参数.Forms.KeyPressEventArgs' 可以找到(您是否缺少 using 指令或程序集引用?) C:\Users\Doğa\Doga Rhodonit\Doga Rhodonit\Doga Rhodonit\Form1.cs 380 23 Doga Rhodonit
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-06-01
                  • 2019-05-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-06-15
                  • 1970-01-01
                  相关资源
                  最近更新 更多