Вы можете использовать словарь для сопоставления различных нажатий клавиш с функциями и добавлять в этот словарь везде, где это имеет смысл структурно. Для очень простого примера:
public partial class Form1 : Form
{
Dictionary<Keys, Action<object, KeyEventArgs>> KeyPressLookup;
public Form1()
{
KeyPressLookup = new Dictionary<Keys, Action<object, KeyEventArgs>>();
KeyPressLookup[Keys.F10] = (o, e) => MessageBox.Show("You pressed F10");
InitializeComponent();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if(KeyPressLookup.ContainsKey(e.KeyCode) // Could use TryGetValue instead
KeyPressLookup[e.KeyCode](sender, e);
}
}
Этот код ограничен тем, что клавише может быть назначена только одна функция, которая может быть хорошей или плохой. Конечно, вы можете создать словарь списков или «MultiDictionary», если вам нужно несколько функций для каждой клавиши.
В качестве альтернативы, вы можете иметь несколько словарей и использовать их в зависимости от обстоятельств, таких как пользовательские параметры или текущий «режим» (в зависимости от структуры вашего приложения).
Используя лямбда-функции, результирующий код в целом может быть гораздо более кратким, чем определение «обычной» функции для каждой клавиши.
Возможно, вы также захотите придумать краткий способ определения функций, отображаемых на комбинации клавиш, например Ctrl-F10. Как далеко вы хотите зайти, будет зависеть от размера вашего приложения.