c# - 向上、向下、向左和向右箭头键不触发 KeyDown 事件

标签 c# winforms keydown

我正在构建一个应用程序,其中所有的键输入都必须由 Windows 本身处理。

我把 tabstop 设置为 false,因为除了一个 panel 之外的每个控件都可以获取焦点(但我不知道它是否有效)。

我将 KeyPreview 设置为 true,我正在处理此表单上的 KeyDown 事件。

我的问题是有时箭头键不再响应:

  • 当我只按下箭头键时,keydown 事件没有被触发。

  • 如果我按下带有控制修饰符的箭头键,则会触发 keydown 事件。

你知道为什么我的箭头键突然停止触发事件吗?

最佳答案

我遇到了完全相同的问题。我考虑了@Snarfblam 提供的答案;但是,如果您阅读 MSDN 上的文档,就会发现 ProcessCMDKey 方法旨在覆盖应用程序中菜单项的键事件。

我最近偶然发现了这篇来自微软的文章,看起来很有前途:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx .根据微软的说法,最好的做法是在检测到箭头键后在 PreviewKeyDown 事件中设置 e.IsInputKey=true;。这样做会触发 KeyDown 事件。

这对我来说效果很好,并且比重写 ProcessCMDKey 更安全。

关于c# - 向上、向下、向左和向右箭头键不触发 KeyDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1646998/

相关文章:

javascript - 单击页面上的任意位置时关闭 Bootstrap 警告

c# - WP7 图片上传

c# - 在menuStrip中只选择一个复选框

c# - 取消选择组合框项目

c# - 根据控件可见性调整表单大小

jquery - 防止退格键移至上一页

c# - NEST FunctionScore()在添加函数之前返回所有索引的项目,在添加它们之后引发异常

asp.net-mvc - 如何构建 VB.NET Windows 窗体应用程序

javascript - EmberJS 中的全局 keyDown/keyPress 事件无需设置焦点

javascript - 如果输入集中,则禁用 keydown 快捷方式