猿问

向上,向下,向左和向右箭头键不会触发KeyDown事件

向上,向下,向左和向右箭头键不会触发KeyDown事件

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

我为每个控件设置了tabstop为false,除了一个面板之外,女巫可以抓住焦点(但我不知道它是否有效)。

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

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

  • 当我只按箭头键时,不会触发keydown事件。

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

你知道我的箭头键突然停止发射事件的原因吗?


九州编程
浏览 285回答 3
3回答

Qyouu

  protected override bool IsInputKey(Keys keyData)     {         switch (keyData)         {             case Keys.Right:             case Keys.Left:             case Keys.Up:             case Keys.Down:                 return true;             case Keys.Shift | Keys.Right:             case Keys.Shift | Keys.Left:             case Keys.Shift | Keys.Up:             case Keys.Shift | Keys.Down:                 return true;         }         return base.IsInputKey(keyData);     }     protected override void OnKeyDown(KeyEventArgs e)     {         base.OnKeyDown(e);         switch (e.KeyCode)         {             case Keys.Left:             case Keys.Right:             case Keys.Up:             case Keys.Down:                 if (e.Shift)                 {                 }                 else                 {                 }                 break;                         }     }

湖上湖

(我原来的答案):从控件类派生,您可以覆盖ProcessCmdKey方法。Microsoft选择从KeyDown事件中省略这些键,因为它们影响多个控件并移动焦点,但这使得应用程序很难以任何其他方式对这些键做出反应。
随时随地看视频慕课网APP
我要回答