Различают ли обычное «ENTER» и нажатие клавиши «ENTER» на цифровой клавиатуре? - PullRequest
5 голосов
/ 09 ноября 2011

В моем обработчике PreviewKeyDown() как определить разницу между клавишей ENTER на цифровой клавиатуре и клавишей ENTER на основной плате?

Обе клавиши возвращают одно и то же значение Key.Enter для KeyEventArgs.Key.

Ближайший ответ, который я могу найти на этот вопрос, находится здесь: В чем разница между Key.Enter и Key.Return? , но, к сожалению, это работает, только если приложение полностью доверяет.

Я бы хотел решение без этого ограничения.

Ответы [ 3 ]

3 голосов
/ 06 июня 2016

См. ссылка , пример импл.ниже.

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;
}

Примечание: если вы хотите проверить обычный EnterKey, то, очевидно, вам следует позвонитьe.Key == Key.Enter && !IsNumpadEnterKey(e)

0 голосов
/ 09 ноября 2011

Код сканирования отличается для каждой клавиши .Вам нужно будет это увидеть.

0 голосов
/ 09 ноября 2011

Извините, если я бесполезен, но я не думаю, что это возможно.Обе клавиши ENTER возвращают одно и то же, поэтому реального способа их различить не существует.

...