【问题标题】:Capturing key presses for form but not for controls捕获表单但不捕获控件的按键
【发布时间】:2009-06-23 12:21:42
【问题描述】:

我有一个简单的模式表单,我想在按下 Esc 时关闭它。处理form_KeyDown 事件很简单。问题是表单上的控件。当表单第一次启动时,其中一个按钮获得焦点并按下 Esc 当然不会做任何事情。禁用每个按钮的TabStop 可以防止这种情况发生,但是当使用任何按钮时 Esc 再次停止工作。除了处理表单上每个控件的KeyDown 之外,还有其他方法吗?

【问题讨论】:

    标签: .net winforms keyboard-shortcuts


    【解决方案1】:

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

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

    这将在按下 Esc 时关闭表单。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我试图在 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 实现这一点的一种相当简单的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-19
          相关资源
          最近更新 更多