.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 MVC 网站中点击“Enter”键
使用 OnKeyUp 在 TextBox 中按下 Enter 时避免 Windows 'Ding'