我在表单的一页中使用了一些richTextBoxes,在keyDown of richTextBoxes中,我写道,如果按下Ctrl+Enter,那么下一个选项卡键就能获得焦点,并且在整个表单上也有一个keyDown事件,所以当用户按下Ctrl+Tab时,所选的页面更改到下一个页面的问题是,当我在richTextBoxes上按Ctrl+Enter、keyDown of form with Ctrl+Tab并更改选项卡时,它为什么会看到enter和tab?对不起,我的语法很差,并感谢您的努力,keyDown事件的主要形式:
private void Main_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab && e.Control)
{
//code for changing the tabs
}
}keyDown事件的richTextBoxes:
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
e.Handled = true;
e.SuppressKeyPress = true;
}
}发布于 2015-01-01 14:06:43
通常,当您按下某个键时,焦点控件接收按下的键。您可以更改一些此流,将Form.KeyPreview属性设置为True。在此设置下,表单接收焦点控件之前按下的键。
在处理到达KeyDown按键事件处理程序的RichTextBox事件时,您正在处理这个“正常”流,试图插入一个假的TAB密钥。您可以取消CTRL+ENTER键,但是在事件的出口处,TAB键是由仍然设置了Control的表单接收的,据我所知,没有一种简单的方法可以重置此位,因此您可以在窗体键下处理CTRL+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;
}
}对form方法SelectNextControl的调用使您能够更好地控制应该发生的事情,并且不会在键盘处理中插入假TAB键。
发布于 2015-01-01 14:16:34
您在按键上发送选项卡SendKeys.Send("{Tab}");。改性剂仍然是CTRL。而不是按下MainForm的焦点捕捉标签。停止发送SendKeys.Send("{Tab}");
https://stackoverflow.com/questions/27731325
复制相似问题