Reputation: 3689
In my PreviewKeyDown()
handler how do I tell the difference between the ENTER key on number-pad and the ENTER key on the main board?
Both keys return the same value Key.Enter
for KeyEventArgs.Key
.
The closest answer I can find to this question is here: What's the difference between Key.Enter and Key.Return?, but unfortunately this works only if the app is fully trusted.
I'd like a solution without this restriction.
Upvotes: 7
Views: 5399
Reputation: 3849
See link, example impl. below.
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. if you want to check for regular EnterKey then obviously you should call
e.Key == Key.Enter && !IsNumpadEnterKey(e)
Upvotes: 7
Reputation: 333
The scan code is different for every key. You will have to be able to see that.
Upvotes: 1
Reputation: 1284
Sorry if I am being useless, but I don't think this is possible. Both of the ENTER keys return the same thing, so there is no real way to distinguish.
Upvotes: 0