I wanted to make user to customise the shortcut keys, so I'm using a textbox to get the key input. The expected state should be to save the key when pressed, and show KeyGesture string when released.
But some keys will be responded to by other registered hotkeys ( like Ctrl+A, win+G etc. ) , unable to determine whether if the keys are all released, so that cannot clear ModifierKeys when appropriate.
Here's my code, if input a registered hotkey this keyCount will be wrong:
KeyGestureConverter keyGestureConverter = new KeyGestureConverter();
Key key;
ModifierKeys modifierKeys;
int keyCount = 0;
private void HotKeyTextbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key.Equals(Key.LeftCtrl) || e.Key.Equals(Key.RightCtrl))
modifierKeys |= ModifierKeys.Control;
else if (e.Key.Equals(Key.LeftAlt) || e.Key.Equals(Key.RightAlt))
modifierKeys |= ModifierKeys.Alt;
else if (e.Key.Equals(Key.LeftShift) || e.Key.Equals(Key.RightShift))
modifierKeys |= ModifierKeys.Shift;
else if (e.Key.Equals(Key.LWin) || e.Key.Equals(Key.RWin))
modifierKeys |= ModifierKeys.Windows;
else
key = e.Key;
keyCount++;
}
private void HotKeyTextbox_KeyUp(object sender, KeyEventArgs e)
{
keyCount--;
try
{
KeyGesture keyGesture = new KeyGesture(key, modifierKeys);
HotKeyTextbox.Text = keyGestureConverter.ConvertToString(keyGesture);
}
catch
{
HotKeyTextbox.Text = string.Empty;
}
if (keyCount <= 0)
{
keyCount = 0;
key = Key.None;
modifierKeys = ModifierKeys.None;
}
}
How about achieving the right effect?