Как реализовать отлов и отображение текущих нажатий клавиш с помощью WPF TextBox? - PullRequest
1 голос
/ 11 июня 2011

Как и в Visual Studio > Options > Keyboard > Press shortcut keys field.

Могу ли я сохранить нажатие этой клавиши как одно комбинированное значение, или мне нужно сохранять нажатие клавиши и каждой клавиши-модификатора отдельно?

Я просто хочу показать текущие нажатые клавиши в TextBox, например:

Ctrl+G
Alt+X
Shift+V
R
Ctrl+Alt+S
etc

Также ищу лучший способ сохранить значение нажатия клавиши.Если мне придется хранить ключи и клавиши-модификаторы отдельно, я создам новый тип, в котором все они находятся в одном месте.

Ответы [ 2 ]

3 голосов
/ 11 июня 2011

В текстовом поле событие KeyDown:

        string keys = "";

        if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
        {
            keys += "Control + ";
        }

        if ((Keyboard.Modifiers & ModifierKeys.Alt) > 0)
        {
            keys += "Alt + ";
        }

        if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0)
        {
            keys += "Shift + ";
        }

        keys += e.Key;

        YourTextBox.Text = keys;
1 голос
/ 11 июня 2011

Я не знаю ни одного более быстрого способа, чем то, что показывает Navid (проверьте для каждого Модификатора в отдельности).

Кроме того, нет встроенного типа, который бы уже сочетал в себе Key и Keyboard.Modifiers, поэтому вам придется создать свой собственный, например, так:

public class KeyboardStatus
{
    public KeyboardStatus(Key key, ModifierKeys modifiers)
    {
        _modifiers = modifiers;
    }

    public Key PressedKey { get; set; }
    public bool IsControlPressed { get { return ((_modifiers & ModifierKeys.Control) > 0); } }
    // ....

    public override string ToString()
    {
        string display = string.Empty;

        display += ((Keyboard.Modifiers & ModifierKeys.Control) > 0) ? "Ctrl + " : string.Empty;
        display += ((Keyboard.Modifiers & ModifierKeys.Alt) > 0) ? "Alt + " : string.Empty;
        display += ((Keyboard.Modifiers & ModifierKeys.Shift) > 0) ? "Shift + " : string.Empty;
        display += ((Keyboard.Modifiers & ModifierKeys.Windows) > 0) ? "Win + " : string.Empty;
        display += PressedKey.ToString();
        return display;
    }
    ModifierKeys _modifiers;
}
...