我在我的表单的一个页面中使用了一些richTextBox,在richTextBoxes的keyDown中,我写了如果按下Ctrl Enter,sendKeys Tab键使得下一个获得焦点,我在整个表单上也有一个keyDown事件,所以当用户按下Ctrl Tab,选中的页面更改为下一页的问题是,当我按下Ctrl键输入富文本框时,带有Ctrl Tab的表格的keyDown发生并且标签发生变化,为什么它看到输入和标签相似?对不起,我的语法很糟糕,感谢您为主要表单所做的keyDown事件:
private void Main_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab && e.Control)
{
//code for changing the tabs
}
}
richTextBoxes的keyDown事件:
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
e.Handled = true;
e.SuppressKeyPress = true;
}
}
2 回答
通常,当您按下某个键时,聚焦控件会接收按下的键 . 您可以更改此流程的一点,将
Form.KeyPreview
属性设置为True . 使用此设置,表单接收在聚焦控件之前按下的键 .当你处理已经到达RichTextBox keydown事件处理程序的KeyDown事件时,你正在弄乱这个试图插入一个假TAB键的'normal'流 . 你压缩了CTRL ENTER键但是,在事件的退出处,TAB键被表格接收,控制位仍然被设置,据我所知,没有简单的方法来重置这个位,因此你处理表单keydown中的CTRL TAB .
幸运的是,所有这些都不需要,您可以使用标签顺序行设置下一个控件
对表单方法SelectNextControl的调用使您可以更好地控制应该发生的事情,并且不会在键盘处理中插入假的TAB键 .
您在keydown上发送标签
SendKeys.Send("{Tab}");
. 修饰符是stil CTRL . 比焦点中的MainForm的keydown捕获Tab . 停止发送SendKeys.Send("{Tab}");
?