winforms应用程序中的键盘处理

时间:2012-07-02 16:50:04

标签: winforms events keyboard focus

我正在构建一个类似于以下内容的WinForms应用程序:

enter image description here

有一个表单,包含菜单,工具栏,状态栏,导航树,自定义绘图画布(可以接受键盘输入并绘制文本并呈现插入符号的UserControl)和允许使用的查找面板用户搜索文本。

我很难让这些行为起作用:

1)查找面板上的加速器(例如,匹配案例的'c'和整个单词的'w')可防止这些字符进入画布,即使画布具有焦点也是如此。

2)当焦点位于任何位置时按ESC键,但画布应将焦点返回到画布。特别是,当“查找”文本框具有焦点时,这应该有效。这可以通过将键盘挂在一个点而不是每个可能的聚焦控制来完成吗?

1 个答案:

答案 0 :(得分:2)

如果您有多个控件竞争键盘输入,请将表单KeyPreview Property设置为True,以便在Form的KeyPress事件处理程序中处理您的KeyPress事件。然后,您可以相应地指示键盘输入。

从MSDN链接上方:

  

获取或设置一个值,该值指示在将事件传递给具有焦点的控件之前表单是否将接收键事件。


看看这样的东西是否适合您,它仍然允许您同时执行 Alt +加速键,但如果它具有焦点并且,则会将焦点设置回用户控件Alt 被按下了:

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (ActiveControl.Name == userControl11.Name )
        {
            if (e.Alt)
            {
                e.Handled = true;
                userControl11.Focus();
            }
        }
    }