2010-07-23 45 views
1

我有一个窗体myForm,它的KeyPreview设置为true。KeyPreview在控制之前没有处理KeyUp事件

这个想法是,我想捕获CTRL-Enter并激发表单的提交按钮,无论哪个文本框(或其他控件)可能有焦点。

所以我成立了这个方法:

private void myForm_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.Enter) 
    { 
     btnCommit_Click(sender, new EventArgs()); 
    } 
} 

这不正是它说。问题是,输入关键笔划也在具有焦点的文本框中触发,所以文本框现在在一个词的中间或光标所在的位置有一个分行符。根据MSDN文档:

当此属性设置为true时,表单将接收所有KeyPress,KeyDown和KeyUp事件。在表单的事件处理程序完成键击处理之后,将键击分配给具有焦点的控件。

这是不幸的,不是真的,我已经通过代码确认了文本框确实显示了新的换行符,然后myForm_KeyUp代码被触发。

我已尝试将两个

e.Handled = true; 

e.SuppressKeyPress = true; 

没有效果,因为文本框已经具备了断行。

任何想法?我错过了什么吗?

回答

1

所以这应该是一个没有道理的。我输入所有这些只是为了意识到我应该一直处理KeyDown而不是KeyUp。显然,KeyUp在TextBox的KeyDown之后触发,即使它在TextBox的KeyUp之前触发。

2

您应该重写OnProcessCmdKey()。它运行得很早,确保没有任何控制可以窃取按键。

相关问题