首页 文章

keydown事件与keys.Enter和keys.Tag

提问于
浏览
0

我在我的表单的一个页面中使用了一些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 回答

  • 0

    通常,当您按下某个键时,聚焦控件会接收按下的键 . 您可以更改此流程的一点,将 Form.KeyPreview 属性设置为True . 使用此设置,表单接收在聚焦控件之前按下的键 .

    当你处理已经到达RichTextBox keydown事件处理程序的KeyDown事件时,你正在弄乱这个试图插入一个假TAB键的'normal'流 . 你压缩了CTRL ENTER键但是,在事件的退出处,TAB键被表格接收,控制位仍然被设置,据我所知,没有简单的方法来重置这个位,因此你处理表单keydown中的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;
        }
    }
    

    对表单方法SelectNextControl的调用使您可以更好地控制应该发生的事情,并且不会在键盘处理中插入假的TAB键 .

  • 0

    您在keydown上发送标签 SendKeys.Send("{Tab}"); . 修饰符是stil CTRL . 比焦点中的MainForm的keydown捕获Tab . 停止发送 SendKeys.Send("{Tab}");

相关问题