.NET TextBox - 处理 Enter 键

Posted

技术标签:

【中文标题】.NET TextBox - 处理 Enter 键【英文标题】:.NET TextBox - Handling the Enter Key 【发布时间】:2010-08-24 16:44:37 【问题描述】:

根据用户在 .NET TextBox 中输入的 Enter 键 (Keys.Enter) 执行操作的最佳方法是什么,假设拥有导致禁止 Enter 键的键输入的所有权文本框本身(e.Handled = true)?

为了这个问题的目的,假设期望的行为不是按下表单的默认按钮,而是应该发生的其他一些自定义处理。

【问题讨论】:

我不明白这个问题。你是问要执行什么动作,还是问如何执行,还是问事件发生时如何通知? 最好的办法就是什么都不做。 Enter 键在 UI 设计中具有明确的含义,不应被篡改。在一种形式中任意使用它来更改焦点,而在另一个对话框中使用 AcceptButton 只会让用户感到困惑。 ChrisW:基础知识都非常明显。我在这里追求的是如何处理与幼稚实现相关的警告,例如,如果您有数据绑定 Text 属性,那么当您处理数据源的 KeyDown 事件时'未使用存储在文本框中的值进行更新。 @Hans Passant:我听到了。在这种情况下,它用于与可选(很少使用)其他输入配对的全文搜索框的上下文中。按 Enter 应该会执行搜索。 【参考方案1】:

添加按键事件并捕获回车键

以编程方式看起来有点像这样:

//add the handler to the textbox
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(CheckEnterKeyPress);

然后在代码中添加处理程序...

private void CheckEnterKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)

        if (e.KeyChar == (char)Keys.Return)

        
           // Then Do your Thang
        

【讨论】:

这里不需要演员表。此外,在对文本框进行数据绑定时,这也无法正常工作,因为在 KeyDown 和 Keys.Return 捕获时数据源尚未更新。 谢谢。你对多余的演员阵容是对的。至于数据绑定的问题,能不能在数据绑定发生后加上keypress事件?或者您可以使用 try/catch 来吞下异常,对吗? 演员阵容现在看起来并不多余;它拒绝编译。【参考方案2】:

为了将函数与文本框的按键事件联系起来,在表单的designer.cs中添加以下代码:

 this.textbox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnKeyDownHandler);

现在在同格式的cs文件中定义函数'OnKeyDownHandler':

private void OnKeyDownHandler(object sender, KeyEventArgs e)


    if (e.KeyCode == Keys.Enter)
    
       //enter key has been pressed
       // add your code
    


【讨论】:

【参考方案3】:

您可以将其放入 FormLoad 事件中:

textBox1.KeyPress += (sndr, ev) => 

    if (ev.KeyChar.Equals((char)13))
    
        // call your method for action on enter
        ev.Handled = true; // suppress default handling
    
;

【讨论】:

这不会抑制默认处理。 您只需要添加ev.Handled = true; 更新后的帖子。 也不是检查输入键的最佳方法。 那么最好的方法是什么?【参考方案4】:

如果您希望某个按钮在程序执行时处理 Enter,只需将表单的 AcceptButton 属性指向该按钮即可。

例如:this.AcceptButton = StartBtn;

【讨论】:

【参考方案5】:

像这样设置 KeyPress 事件:

this.tMRPpart.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tMRPpart_KeyPress);

然后您可以执行包括检测事件中的“输入”键在内的操作 -

private void tMRPpart_KeyPress(object sender, KeyPressEventArgs e)

    // force any lower case characters into capitals
    if (e.KeyChar >= 'a' && e.KeyChar <= 'z')
        e.KeyChar -= (char)32;

    // If user presses return, tab to next tab stop
    if (e.KeyChar == (char)Keys.Return)
    
        if (sender is Control)
        
            // Move to next control
            SelectNextControl((Control)sender, true, true, true, true);
        
    

在我的例子中,如果用户按下回车键,我希望应用程序跳到下一个字段。

【讨论】:

以上是关于.NET TextBox - 处理 Enter 键的主要内容,如果未能解决你的问题,请参考以下文章

asp.net c# 回车enter文本框填满后提交

处理用户在 ASP.NET MVC 网站中点击“Enter”键

UWP中的键盘快捷键

使用 OnKeyUp 在 TextBox 中按下 Enter 时避免 Windows 'Ding'

WPF:一个文本框,它具有在按下 Enter 键时触发的事件

在ie9下在textbox框里面输入内容按enter键会触发按钮的事件