区分正常的“ENTER”和数字键盘“ENTER”按键?

时间:2011-11-09 01:00:22

标签: wpf keyboard keyboard-events

在我的PreviewKeyDown()处理程序中,如何区分数字键盘上的ENTER键和主板上的ENTER键之间的区别?

两个键都为Key.Enter返回相同的值KeyEventArgs.Key

我可以在这里找到最接近这个问题的答案:What's the difference between Key.Enter and Key.Return?,但不幸的是,这只有在应用程序完全受信任的情况下才有效。

我想要一个没有这个限制的解决方案。

3 个答案:

答案 0 :(得分:3)

请参阅link,示例impl。下方。

private static bool IsNumpadEnterKey(KeyEventArgs e)
{
  if (e.Key != Key.Enter)
    return false;

  // To understand the following UGLY implementation please check this MSDN link. Suggested workaround to differentiate between the Return key and Enter key.
  // https://social.msdn.microsoft.com/Forums/vstudio/en-US/b59e38f1-38a1-4da9-97ab-c9a648e60af5/whats-the-difference-between-keyenter-and-keyreturn?forum=wpf
  try
  {
    return (bool)typeof(KeyEventArgs).InvokeMember("IsExtendedKey", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance, null, e, null);
  }
  catch (Exception ex)
  {
    if (AiLoggingService.IsErrorEnabled)
      AiLoggingService.LogError("Could not get the internal IsExtendedKey property from KeyEventArgs. Unable to detect numpad keypresses.", ex);
  }

  return false;
}

N.b。如果你想检查常规的EnterKey,那么显然你应该打电话给 e.Key == Key.Enter && !IsNumpadEnterKey(e)

答案 1 :(得分:0)

对不起,如果我没用,但我不认为这是可能的。两个ENTER键都返回相同的内容,因此无法区分真实的方法。

答案 2 :(得分:0)

每个键的扫描代码不同。你必须能够看到它。