4

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

我想

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

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

我的问题是:

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

解决方案

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;
4

3 回答 3

6

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

编辑:不工作:以前建议的EnterMoveNextControl财产

于 2012-06-04T09:25:24.643 回答
2

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

private void rtbNote_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
}
于 2013-11-07T08:10:23.290 回答
1

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

于 2012-06-04T09:26:13.147 回答