KeyUp事件没有触发,直到我ALT + Tab离开然后回到我的应用程序

时间:2011-06-03 19:25:57

标签: .net winforms keyboard

我的Windows窗体表单遇到了一个非常奇怪的问题。正如标题中所述,KeyUp事件根本没有在应用程序中触发,直到我将alt + tab远离窗口,然后返回。切换之前在应用程序中单击的位置无关紧要;没有任何反应。

此外,如果我远离应用程序alt-tab,但点击应用程序的任务栏切换回来,那么我仍然没有得到KeyUp事件。单击,然后按alt-tabbing,使KeyUp事件再次正常运行。

似乎我只有在我对应用程序进行Alt-Tab时才会获得KeyUp事件 - 但在任何其他情况下都没有。

KeyPreview属性为true。我没有在应用程序中进行任何其他关键处理 - 只是在KeyUp事件中。

我真的需要这个应用程序能够响应KeyUp事件,特别是刚启动后 - 我不想指示我的用户使用alt-tab然后返回只是为了让键盘输入功能正常。有没有人看过这个问题并找到了解决方法?


更新:我已经对此进行了更多修改,我发现了一种解决方法 - 但它肯定是一种克服,我不喜欢它。在表单的OnShown覆盖中,我添加了对this.Focus();的调用。我还为this.LostFocus添加了一个也调用this.Focus();的事件处理程序。这是此应用程序中唯一的形式,所以这些都不是问题 - 我只是希望我理解为什么这种情况正在发生。 =(好吧。

我将此添加为更新而不是答案,因为,这个不是的答案。的Bleh。

2 个答案:

答案 0 :(得分:1)

也许这会有所帮助: http://support.microsoft.com/kb/828964

我已经覆盖了表单的ProcessCmdKey()方法,以便首先“接收”表单中的加速键。

答案 1 :(得分:0)

我最终放弃了使用表单事件 - 我现在正在注册一个全局Windows热键,用于我想要捕获的键序列,而且工作得很好。在我的情况下,热键是全局的并不重要,因为我的应用程序被设计为该系统中唯一使用的应用程序。