捕获并处理KeyPress / KeyDown而不修改TextBox中的文本

时间:2016-03-06 15:54:41

标签: c# winforms events textbox keyboard

我目前有以下事件处理程序,它在我的表单代码中捕获Ctrl + Enter键组合:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter && e.Control)
    {
        // Stuff
    }
}

我在表单中还有两个非ReadOnly TextBox,其中一个是多行的,而另一个是不是。每当我按Ctrl + Enter时,事件都会被处理,但当焦点位于TextBox中时,它也会注册为Enter键。我想要做的是注册键组合而不用 Enter键按下修改任一框中的文本。我有什么办法可以做到这一点吗?

2 个答案:

答案 0 :(得分:4)

您最好的选择是使用ProcessCmdKey:只需将其添加到您的表单即可添加它:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Control | Keys.Enter))
    {
        // Stuff
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

答案 1 :(得分:2)

您应该使用PreviewKeyDown事件,并相应地设置IsInputKey属性:

Form

更新:从您的处理程序名称,我猜您已将其添加到KeyPress/KeyDown/PreviewKeyDown的{​​{1}}事件中。相反,您应该在每个TextBox的{​​{1}}事件中注册我上面显示的方法。

要不破坏已经适用的内容,您可以保留代码,只需在PreviewKeyDown的{​​{1}}事件中添加处理程序,将TextBox设置为false对于指定的键,但不要执行PreviewKeyDown