捕获表格的按键,但不控制

时间:2009-06-23 12:21:42

标签: .net winforms keyboard-shortcuts

我有一个简单的模态形式,当按下 Esc 时我想关闭它。处理form_KeyDown事件很简单。问题是表单上的控件。当表单首次启动时,其中一个按钮获得焦点并按 Esc 当然不会做任何事情。禁用每个按钮的TabStop会阻止此操作,但是当使用任何按钮时, Esc 将再次停止工作。除了处理表单上每个控件的KeyDown之外,有没有办法做到这一点?

3 个答案:

答案 0 :(得分:8)

您的表单是否有“取消”按钮?

如果是这样,请将表单的CancelButton属性设置为该按钮。

当按下 Esc 时,这将关闭表格。

答案 1 :(得分:4)

您需要将表单上的KeyPreview属性设置为true,并处理表单previewkeydown事件。

答案 2 :(得分:0)

我试图在Compact Framework应用程序中执行或多或少相同的操作(我想让Form捕获F1..Fn键并以全局方式处理它们,同时让控件处理光标和数字键)。 Simon P Stevens的解决方案是桌面.NET的理想选择,但CF不支持PreviewKeyDown。所以我的解决方案是:

  • 加载表单时,使用For Each ctl As Control In ControlsAddHandler ctl.KeyDown, AddressOf OnControlKeyDown

  • 注册每个控件的KeyDown处理程序
  • 创建OnControlKeyDown并对其中的Fn键执行特殊处理。所有其他击键保持原样。

这似乎是为Compact Framework实现此功能的一种相当简单的方法。