Существует ли какая-либо структура для реализации сочетаний клавиш в приложении Windows .NET2.0? Также каковы лучшие практики, о которых следует позаботиться при этом?
Реализация сочетаний клавиш в приложении Windows .NET2.0
Ответы (2)
Хотя нет очевидного способа предоставить клавиши быстрого доступа для команд, не находящихся в меню, добавить их несложно. Есть пять основных шагов:
Определите перечисление ускорителей.
private enum Accelerators { Unspecified = 0, Home, Save, Print, Logout };
Создайте хеш-таблицу, содержащую перечисленные значения.
Hashtable _accelHash() = new Hashtable();
Создайте класс для представления сочетаний клавиш.
Загрузите таблицу с перечислением Keys.
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.H),
Accelerators.Home);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.S),
Accelerators.Save);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.P),
Accelerators.Print);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.X),
Accelerators.Logout);
Наконец, переопределите ProcessCmdKey и используйте оператор switch для отправки нужному методу.
protected override bool ProcessCmdKey(ref Message msg,
Keys keyData)
{
...
}
В качестве альтернативы, для немного более сложного подхода, вы могли бы сопоставить хеш-таблицу с делегатами, которые были методами, которые вы хотели вызвать, если все они имели одинаковую сигнатуру метода.
Вот короткая статья, в которой описанные выше шаги более подробно описаны.
Распространенным способом реализации сочетаний клавиш является их обнаружение в событии клавиатуры, таком как KeyDown или KeyUp.
Пример
public void Form1_KeyUp(object sender,KeyEventArgs e)
{
if (e.Control && e.KeyData==Keys.A)
{
//handle ctrl+a
}