Реализация сочетаний клавиш в приложении Windows .NET2.0

Существует ли какая-либо структура для реализации сочетаний клавиш в приложении Windows .NET2.0? Также каковы лучшие практики, о которых следует позаботиться при этом?


person Ramesh Soni    schedule 10.03.2009    source источник


Ответы (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)
{
    ...
}

В качестве альтернативы, для немного более сложного подхода, вы могли бы сопоставить хеш-таблицу с делегатами, которые были методами, которые вы хотели вызвать, если все они имели одинаковую сигнатуру метода.

Вот короткая статья, в которой описанные выше шаги более подробно описаны.

person John Feminella    schedule 10.03.2009

Распространенным способом реализации сочетаний клавиш является их обнаружение в событии клавиатуры, таком как KeyDown или KeyUp.

Пример

public void Form1_KeyUp(object sender,KeyEventArgs e)
{
if (e.Control && e.KeyData==Keys.A)
{
//handle ctrl+a
}
person Crippledsmurf    schedule 10.03.2009