При написании приложений рассмотрите шаблон Observer.
В общем случае вы можете добавить метод Subscribe к вашей клавиатуре, который принимает делегата (также позволяет отменить подписку) Для обработки события нажатия клавиши, переберите всех подписанных делегатов, отправив ему код символа.
Код (в основном из памяти, фрагменты, вероятно, не скомпилируются, но должны помочь вам)
delegate void KeyPadSubscription (char keyPressed);
List<KeyPadSubscription> subscriptions;
void KeyPress (object sender, KeyPressArgs e)
{
foreach (KeyPadSubscription sub in subscriptions)
sub (e.CharCode)
}
void Subscribe(KeyPadSubscription s)
{
subscriptions.Add(s);
}
void Unsubscribe(KeyPadSubscription s)
{
subscriptions.Remove(s);
}
В вашем случае вам, вероятно, не нужен список делегатов, а свойства может быть достаточно. Затем, когда ваши формы меняют фокус, активная форма устанавливает свой метод в качестве делегата для вашей клавиатуры.
void MyForm_Activated(...)
{
//assumes keypad is global or static
KeyPad.Subsribe (this.HandleKeyPadPress)
}