0

我正在构建一个大致如下所示的 WinForms 应用程序:

在此处输入图像描述

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

我很难让这些行为发挥作用:

1) 查找面板上的加速键(例如,'c' 表示大小写匹配,'w' 表示整个单词)可防止将这些字符输入到画布中,即使画布具有焦点也是如此。

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

4

1 回答 1

2

如果您有多个控件竞争键盘输入,请将 Forms 设置为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();
            }
        }
    }
于 2012-07-02T16:58:00.480 回答