#c# #.net #wpf #keyboard #keyboard-shortcuts
#c# #.net #wpf #клавиатура #сочетания клавиш
Вопрос:
Как в Visual Studio > Options > Keyboard > Press shortcut keys field
.
Могу ли я сохранить это нажатие клавиши как одно объединенное значение или мне нужно сохранить нажатие клавиши и каждую клавишу-модификатор отдельно?
Я просто хочу показать текущие нажатые клавиши в TextBox
виде:
Ctrl G
Alt X
Shift V
R
Ctrl Alt S
etc
Также ищем наилучший способ сохранить значение нажатия клавиши. Если мне придется хранить ключи и ключи-модификаторы отдельно, то я создам новый тип, в котором они все будут в одном месте.
Ответ №1:
В событии нажатия клавиш текстового поля:
string keys = "";
if ((Keyboard.Modifiers amp; ModifierKeys.Control) > 0)
{
keys = "Control ";
}
if ((Keyboard.Modifiers amp; ModifierKeys.Alt) > 0)
{
keys = "Alt ";
}
if ((Keyboard.Modifiers amp; ModifierKeys.Shift) > 0)
{
keys = "Shift ";
}
keys = e.Key;
YourTextBox.Text = keys;
Комментарии:
1. Спасибо, это работает, но если я нажимаю «Alt AnyKey», выводится «Alt System», а не «Alt F». Как исправить это поведение?
2. Взгляните на здесь вы найдете свой ответ.
Ответ №2:
Я не знаю более быстрого способа, чем то, что показывает Navid (проверяйте каждый модификатор по отдельности).
Кроме того, нет встроенного типа, который объединяет клавишу и клавиатуру.Модификаторы уже есть, поэтому вам придется создать свои собственные, подобные этому:
public class KeyboardStatus
{
public KeyboardStatus(Key key, ModifierKeys modifiers)
{
_modifiers = modifiers;
}
public Key PressedKey { get; set; }
public bool IsControlPressed { get { return ((_modifiers amp; ModifierKeys.Control) > 0); } }
// ....
public override string ToString()
{
string display = string.Empty;
display = ((Keyboard.Modifiers amp; ModifierKeys.Control) > 0) ? "Ctrl " : string.Empty;
display = ((Keyboard.Modifiers amp; ModifierKeys.Alt) > 0) ? "Alt " : string.Empty;
display = ((Keyboard.Modifiers amp; ModifierKeys.Shift) > 0) ? "Shift " : string.Empty;
display = ((Keyboard.Modifiers amp; ModifierKeys.Windows) > 0) ? "Win " : string.Empty;
display = PressedKey.ToString();
return display;
}
ModifierKeys _modifiers;
}
Комментарии:
1. Спасибо, это работает, но если я нажимаю «Alt AnyKey», выводится «Alt System», а не «Alt F». Как исправить это поведение?
2. Может ли быть так, что строка display = Key. toString() на самом деле использует Key в качестве типа, а не Key для локального свойства? Попробуйте переименовать свойство в PressedKey (или какое-либо другое незащищенное имя). Я изменю пример.