我有一个表单 myForm,它的 KeyPreview 设置为 true。
这个想法是我想捕获 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;
无效,因为文本框已经显示了换行符。
有任何想法吗?我错过了什么吗?