我正在构建一个应用程序,其中所有的键输入都必须由 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/