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

4
在WinForms表单中有一个TextBox控件(确切地说是DevExpress TextEdit),如果焦点在文本框内,当用户按下回车键时,我不希望该表单关闭。
我认为
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;
3个回答

6
< p > 更新:也尝试处理PreviewKeyDown事件。MSDN文档在备注部分对此有很好的解释。通过将IsInputKey设置为true,您可以覆盖默认行为,使得您的TextBox可以处理该键。您需要在PreviewKeyDown中这样做,然后像KeyDown一样处理该键。

编辑:不起作用:之前建议使用的EnterMoveNextControl属性。


1
@UweKeim 我更新了我的答案。看起来你还需要处理 PreviewKeyDown 以便文本框不会忽略回车键按下事件。 - Botz3000

2
根据你们的解决方案,在普通的RichTextBox处理中,使用PreviewKeyDown已经足够好了。
private void rtbNote_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
}

1

没有亲自尝试过,我认为我会在文本框的 KeyDown 中设置一个布尔值,然后在窗体关闭时检查该布尔值,如果已设置,则取消窗体关闭(然后重置布尔值)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接