首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用keys.Enter和keys.Tag的按键事件

使用keys.Enter和keys.Tag的按键事件
EN

Stack Overflow用户
提问于 2015-01-01 13:47:35
回答 2查看 1.4K关注 0票数 0

我在表单的一页中使用了一些richTextBoxes,在keyDown of richTextBoxes中,我写道,如果按下Ctrl+Enter,那么下一个选项卡键就能获得焦点,并且在整个表单上也有一个keyDown事件,所以当用户按下Ctrl+Tab时,所选的页面更改到下一个页面的问题是,当我在richTextBoxes上按Ctrl+Enter、keyDown of form with Ctrl+Tab并更改选项卡时,它为什么会看到enter和tab?对不起,我的语法很差,并感谢您的努力,keyDown事件的主要形式:

代码语言:javascript
复制
private void Main_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab && e.Control)
    {
        //code for changing the tabs
    }
}

keyDown事件的richTextBoxes:

代码语言:javascript
复制
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.Enter)
    {
        SendKeys.Send("{Tab}");
        e.Handled = true;
        e.SuppressKeyPress = true;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-01 14:06:43

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

在处理到达KeyDown按键事件处理程序的RichTextBox事件时,您正在处理这个“正常”流,试图插入一个假的TAB密钥。您可以取消CTRL+ENTER键,但是在事件的出口处,TAB键是由仍然设置了Control的表单接收的,据我所知,没有一种简单的方法可以重置此位,因此您可以在窗体键下处理CTRL+TAB。

幸运的是,所有这些都不需要,您只需在选项卡顺序行中设置下一个控件

代码语言:javascript
复制
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键。

票数 0
EN

Stack Overflow用户

发布于 2015-01-01 14:16:34

您在按键上发送选项卡SendKeys.Send("{Tab}");。改性剂仍然是CTRL。而不是按下MainForm的焦点捕捉标签。停止发送SendKeys.Send("{Tab}");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27731325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档