7 votes

Distinguer entre la touche normale "ENTER" et la touche "ENTER" du pavé numérique ?

Dans mon PreviewKeyDown() comment puis-je faire la différence entre la touche ENTER du pavé numérique et la touche ENTER de la carte principale ?

Les deux clés renvoient la même valeur Key.Enter para KeyEventArgs.Key .

La réponse la plus proche que je puisse trouver à cette question est ici : Quelle est la différence entre Key.Enter et Key.Return ? mais malheureusement, cela ne fonctionne que si l'application est totalement fiable.

J'aimerais une solution sans cette restriction.

7voto

EricG Points 1723

Véase lien , exemple impl. ci-dessous.

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)
  {
    Log("Could not get the internal IsExtendedKey property from KeyEventArgs. Unable to detect numpad keypresses.", ex);
  }

  return false;
}

N.B. Si vous voulez vérifier la présence de EnterKey réguliers, vous devez évidemment appeler
e.Key == Key.Enter && !IsNumpadEnterKey(e)

1voto

FlyingGuy Points 200

Le code de balayage est différent pour chaque clé. Vous devez être capable de la voir.

0voto

Jaxkr Points 596

Désolé si je suis inutile, mais je ne pense pas que cela soit possible. Les deux touches ENTER renvoient la même chose, il n'y a donc aucun moyen de faire la distinction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X