我目前有以下事件处理程序,它在我的表单代码中捕获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键按下修改任一框中的文本。我有什么办法可以做到这一点吗?
答案 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
。