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

Posted

技术标签:

【中文标题】当用户在文本框中按下回车键时如何不关闭表单【英文标题】:How to not close a form when user presses enter key inside a text box 【发布时间】:2012-06-08 09:19:51 【问题描述】:

在 WinForms 表单中有一个TextBox 控件(准确地说是DevExpress TextEdit),如果焦点在里面,我确实希望表单在用户按下回车键时关闭文本框。

我想

filterTextBox.KeyDown += 
    (sender, e) => 
        e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;

足够了,但它似乎被忽略并且表单仍然关闭。

我的问题是:

如何故意忽略单行文本框控件内的回车以使表单保持打开状态?

解决方案

The solution of Botz3000 为我工作:

filterTextBox.PreviewKeyDown += 
    (sender, e) => 
        e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
filterTextBox.KeyDown += 
    (sender, e) => 
        e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;

【问题讨论】:

【参考方案1】:

更新:也尝试处理PreviewKeyDown 事件。 MSDN 文档在备注部分很好地解释了它。通过将IsInputKey 设置为true,您可以覆盖默认行为,以便您的TextBox 可以处理密钥。您需要在PreviewKeyDown 中执行此操作,然后像在KeyDown 中一样处理密钥。

编辑:不工作:以前建议 EnterMoveNextControl 属性

【讨论】:

@UweKeim 我更新了我的答案。看起来您还需要处理 PreviewKeyDown 以便文本框不会忽略输入键。【参考方案2】:

根据你们的解决方案,定期RichTextBox 处理PreviewKeyDown 已经足够好了。

private void rtbNote_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)

    e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;

【讨论】:

【参考方案3】:

如果不亲自尝试,我想我只需在文本框的KeyDown 中设置一个布尔值,然后在表单关闭中,检查该布尔值并取消表单关闭(如果已设置)(然后重置布尔值)。

【讨论】:

以上是关于当用户在文本框中按下回车键时如何不关闭表单的主要内容,如果未能解决你的问题,请参考以下文章

按下回车默认提交form表单问题

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

数据更改时如何刷新氧图

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

在 Struts 2 + jQuery + json 中按回车键停止提交表单

从html输入文本框中按回车键时如何防止回发?