首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发窗体KeyPress事件

触发窗体KeyPress事件
EN

Stack Overflow用户
提问于 2011-03-31 19:59:17
回答 5查看 9.7K关注 0票数 7

我有一个C# winform,上面有一个按钮。

现在,当我运行我的应用程序时,按钮自动获得焦点。

问题是我的窗体的KeyPress事件不工作,因为按钮被聚焦了。

我在FormLoad()事件上尝试了this.Focus();,但KeyPress事件仍然不起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-31 20:09:29

您需要覆盖表单的 method。这是当子控件具有键盘焦点时,通知您发生按键事件的唯一方式。

示例代码:

代码语言:javascript
复制
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // look for the expected key
    if (keyData == Keys.A)
    {
        // take some action
        MessageBox.Show("The A key was pressed");

        // eat the message to prevent it from being passed on
        return true;

        // (alternatively, return FALSE to allow the key event to be passed on)
    }

    // call the base class to handle other key events
    return base.ProcessCmdKey(ref msg, keyData);
}

至于为什么this.Focus()不能工作,这是因为表单本身不能拥有焦点。特定控件必须具有焦点,因此当您将焦点设置到窗体时,它实际上会将焦点设置到第一个可以接受TabIndex值最低的焦点的控件。在本例中,这是您的按钮。

票数 11
EN

Stack Overflow用户

发布于 2011-03-31 20:01:15

尝试将窗体的KeyPreview属性设置为True。

票数 5
EN

Stack Overflow用户

发布于 2012-06-07 12:03:11

在主窗体上设置keyPreview = true

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

https://stackoverflow.com/questions/5499463

复制
相关文章

相似问题

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