2004年09月13日
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); }