WinForms のショートカットキーで使えるキーを増やす方法

.NET Framework では、MenuItem のプロパティでショートカットキーを選べるのだけども、この選択肢が現実的なアプリケーションで想定するものよりもかなり少ない。Ctrl や Alt と方向キー・Home・Enter などとの組み合わせすら存在しない(System.Windows.Form.Shortcut 列挙体 参照)。

これらのショートカットを利用できるようにするには、ソースコードレベルでショートカットを割り当てる必要がある。そのためには、親 Form の ProcessCmdKey をオーバーライドすればよい。

ProcessCmdKey は全てのコントロールに存在し、フォーカスのあるコントロールから順に親 Form までキーストロークが処理されるまで呼ばれ続けるらしい。

例えば、Alt+Home で特定のメニューをキックするなら次の通り。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
	if(keyData == (Keys.Home | Keys.Alt))
	{
		menuXXXX_Click(this, null);
	}

	return base.ProcessCmdKey(ref msg, keyData); 
}

参照ページ