捕获表单按键,但不包括控件按键。

3
我有一个简单的模态表单,我希望在按下 Esc 键时关闭它。可以通过处理 form_KeyDown 事件来实现这个功能。但问题是表单上的控件。当表单首次启动时,其中一个按钮会获得焦点,按下 Esc 当然不起作用。禁用每个按钮的 TabStop 可以解决这个问题,但是当使用任何按钮时,Esc 将再次停止工作。除了处理表单上每个控件的 KeyDown,还有其他方法吗?
3个回答

8

你的表单有“取消”按钮吗?

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

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


4

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


0

我试图在一个紧凑框架应用程序中做更或多或少相同的事情(我想让表单捕获F1..Fn键并以全局方式处理它们,同时让控件处理光标和数字键)。 Simon P Stevens上面的解决方案非常适合桌面.NET,但CF不支持PreviewKeyDown。所以我的解决方案是:

  • 在加载表单时,使用For Each ctl As Control In ControlsAddHandler ctl.KeyDown, AddressOf OnControlKeyDown注册每个控件的KeyDown处理程序

  • 创建OnControlKeyDown并在那里对Fn键进行特殊处理。所有其他按键保持不变。

这似乎是一种相当简单的实现方法,适用于紧凑框架。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接