如何判断何时在 TextBox 中按下回车键?

Posted

技术标签:

【中文标题】如何判断何时在 TextBox 中按下回车键?【英文标题】:How do I tell when the enter key is pressed in a TextBox? 【发布时间】:2012-08-02 02:50:54 【问题描述】:

基本上,我希望能够在按下 ENTER 键时触发事件。我已经试过了:

private void input_KeyDown(object sender, KeyEventArgs e)
    
        if (e.Equals("ENTER"))
        
            MessageBox.Show("Pressed enter.");
        
    

但 MessageBox 永远不会出现。我该怎么做?

【问题讨论】:

在 KeyUp 上执行此操作可能是个好主意(取决于您的情况)。每次释放键时都会调用一次 KeyUp。但是当键按下时会不断调用 keydown。 【参考方案1】:

试一试...

private void input_KeyDown(object sender, KeyEventArgs e) 
                        
    if(e.KeyData == Keys.Enter)   
      
        MessageBox.Show("Pressed enter.");  
                 

【讨论】:

谢谢,这非常有用,足以让我自己找出实际的语法。我的语法是: if(e.Key == Key.Enter) // using System.Windows.Input @user2010136:这个问题是关于 Windows 窗体的,听起来你使用的是 WPF。【参考方案2】:

要添加到@Willy David Jr 的答案:您也可以使用实际的密钥代码。

private void input_KeyDown(object sender, KeyEventArgs e)

    if (e.KeyChar == 13)
    
        MessageBox.Show("Pressed enter.");
    

【讨论】:

这样更好,因为它也适用于KeyPressEvent【参考方案3】:

其实你可以说

private void input_KeyDown(object sender, KeyEventArgs e)

    if (e.Key == Key.Enter)
    
        MessageBox.Show("Pressed enter.");
    

【讨论】:

这与 2012 年给出的答案完全相同。 这实际上不是 exact 相同的答案,它使用e.Key,而其他人使用e.KeyCodee.KeyDatae.KeyChar。最好有答案来解决所有略有不同的属性并建议使用最好的属性。 这个答案适用于WPF,其余的到目前为止都适用于WinForms。【参考方案4】:

您可以使用 Keypress 事件。如果您只是在寻找“Enter”按键,那么您可能不关心修饰键(例如 Shift 和/或 Ctrl),这就是为什么大多数人会使用 KeyDown 而不是 Keypress。第二个好处是回答了在实现任何其他答案后几乎总是被问到的问题:“当我使用引用的代码时,为什么按“Enter”会发出哔声?”这是因为需要处理 Keypress 事件。通过使用 Keypress,您可以在一处解决这两个问题:

private void input_KeyPress(object sender, KeyPressEventArgs e)

    if (e.KeyChar == (char)Keys.Enter)
    
        // Your logic here....
        e.Handled = true; //Handle the Keypress event (suppress the Beep)
    

【讨论】:

【参考方案5】:

如果您的表单定义了 AcceptButton,您将无法使用 KeyDown 来捕获 Enter。

您应该做的是在表单级别捕获它。将此代码添加到表单中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

    if ((this.ActiveControl == myTextBox) && (keyData == Keys.Return))
    
        //do something
        return true;
    
    else
    
        return base.ProcessCmdKey(ref msg, keyData);
    

【讨论】:

【参考方案6】:

您也可以这样做:

  private void input_KeyDown(object sender, KeyEventArgs e) 
                          
    if(e.KeyCode== Keys.Enter)   
      
        //Your business logic here.
                 
  

KeyCodeKeyData 的唯一区别在于,KeyCode 可以检测与 KeyCode 的修饰符组合(例如 CTRL、Shift + A),而您在这里不需要。

【讨论】:

以上是关于如何判断何时在 TextBox 中按下回车键?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在文本框中按下回车键时如何不关闭表单

JS中如何判断他输入了回车键~!!!

如何检测是不是在JS中按下回车键[重复]

在 React Native 中按下回车时如何禁用在多行 TextInput 中插入新行

C#:如何在文本框中按下回车键触发按钮,但仍然允许“Ctrl+A”等快捷键通过?

用户在文本框中按下回车的 JQuery 事件?