如何判断在文本框中何时按下回车键

本文关键字:何时按 回车 文本 何判断 判断 | 更新日期: 2024-09-24 13:48:50

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

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

但是MessageBox从未出现。我该怎么做?

如何判断在文本框中何时按下回车键

试试。。。

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

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

private void input_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyChar == 13)
    {
        MessageBox.Show("Pressed enter.");
    }
}

实际上你可以说

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

您可以使用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)
    }
}

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

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

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

您也可以这样做:

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

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

快进到2022年,上面的声明完全相反。

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

KeyDown事件e.KeyCode不会触发Keys。输入