Реализация сочетаний клавиш в Windows-приложении .NET2.0 - PullRequest
0 голосов
/ 10 марта 2009

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

Ответы [ 2 ]

2 голосов
/ 10 марта 2009

Хотя не существует очевидного способа предоставления клавиш ускорения для команд, не входящих в меню, добавить их не очень сложно. Есть пять основных шагов:

Определение нумерации акселератора.

private enum Accelerators { Unspecified = 0, Home, Save, Print, Logout }; 

Создание хеш-таблицы, содержащей перечисленные значения.

Hashtable _accelHash() =  new Hashtable();

Создать класс для представления клавиш ускорения.

Загрузить таблицу с перечислением ключей.

_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)
{
    ...
}

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

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

0 голосов
/ 10 марта 2009

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

Пример

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