我在我的表单的一个页面中使用了一些richTextBox,在richTextBoxes的keyDown中,我写了如果按下Ctrl + Enter,sendKeys Tab键让下一个获得焦点,我也有一个keyDown事件表单,因此当用户按Ctrl + Tab时,所选页面更改为下一页 问题是,当我在richTextBox上按Ctrl + Enter时,带有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;
}
}
答案 0 :(得分:0)
通常,当您按下某个键时,聚焦控件会接收按下的键。您可以更改此流程的一点,将Form.KeyPreview
属性设置为True。使用此设置,表单接收在聚焦控件之前按下的键。
当您处理已到达RichTextBox keydown事件处理程序的KeyDown事件时,您正在弄乱此' 流尝试插入假TAB密钥。你抑制了CTRL + ENTER键但是,在事件的退出处,TAB键被表格接收,控制位仍然设置,据我所知,没有简单的方法来重置这个位,因此你处理表单keydown中的CTRL + TAB。
幸运的是,不需要所有这些,只需使用
在Tab键顺序行中设置下一个控件private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
Control current = sender as Control;
this.SelectNextControl(current, true, true, true, true);
e.SuppressKeyPress = true;
}
}
对表单方法SelectNextControl的调用使您可以更好地控制应该发生的事情,并且不会在键盘处理中插入假的TAB键。
答案 1 :(得分:0)
您在keydown上发送标签SendKeys.Send("{Tab}");
。修饰符是stil CTRL。比焦点中的MainForm的keydown捕获Tab。停止发送SendKeys.Send("{Tab}");
?