2009-03-10 4 views

ответ

2

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

Определить перечисление ускорителя.

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 и использовать переключатель заявление для отправки на правильный метод.

protected override bool ProcessCmdKey(ref Message msg, 
             Keys keyData) 
{ 
    ... 
} 

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

Here's a short article, который более подробно описывает шаги выше.

0

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

Пример

public void Form1_KeyUp(object sender,KeyEventArgs e) 
{ 
if (e.Control && e.KeyData==Keys.A) 
{ 
//handle ctrl+a 
} 
Смежные вопросы