Хотя не существует очевидного способа предоставления клавиш ускорения для команд, не входящих в меню, добавить их не очень сложно. Есть пять основных шагов:
Определение нумерации акселератора.
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)
{
...
}
В качестве альтернативы, для немного более сложного подхода вы могли бы иметь карту хеш-таблицы для делегатов, которые были методами, которые вы хотели вызывать, при условии, что у них всех была одинаковая сигнатура метода.
Вот небольшая статья , в которой более подробно описываются вышеприведенные шаги.