2012-07-02 62 views
0

我建立一个WinForms应用程序看起来大致是这样的处理:键盘在一个WinForms应用程序

enter image description here

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

我在与获得这些行为的工作难度:查找小组

1)加速器(如“C”的匹配情况和“W”全字)防止这些字符被输入进入画布,即使画布有焦点。

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

回答

2

如果您有多个控件竞争键盘输入,请将表格KeyPreview Property设置为True,以便在窗体的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(); 
      } 
     } 
    } 
+0

谢谢 - 这可能适用于问题#2。关于第一个问题的任何想法? – bright

+0

@bright我对两者都使用了相同的过程。只需查找相应的修改键即可。 –

+0

我看到 - 不幸的是这意味着明确检查每个修饰符。如果没有一般的方法,会这样做,但我仍然坚持一个。 – bright

相关问题