この、「Ctrl + O」のことをショーカット・キーといいます。Win32APIのプログラミングでは、「O」のことをショートカット・キー、「Ctrl + O」のことをアクセラレータ・キーと呼んでいました。しはしば、これらは混同して使われていましたが、C#では、Ctrl + Oのことを正式にショートカット・キーというように決まったようです。(この名前の列挙体までできてしまった!!)
従来のショートカット・キーとアクセラレータ・キーの違いは、何かというとショートカット・キーでは、そのメニュー項目が表示されていないと効果が無く、アクセラレータ・キーでは、その項目が表示されていなくても効果がある、ということです。これは、普通にアプリケーションを使っていると自然にわかってきますね。
さて、ショートカット・キーを設定するには、MenuItemクラスのShortcutプロパティにShortcut列挙体を指定します。
public Shortcut Shortcut { get; set; }Shortcutのプロパティ値はShortcut列挙体です。この列挙体はメンバが大量にいます。 しかし、単純なのですぐわかります。CtrlAメンバはCtrl + Aを表します。まんまです。 Ctrl + Shift + Xの組み合わせのメンバもあります。
コンストラクタで、ショートカットも設定してしまうのが簡単です。MenuItemクラスのコンストラクタで、ショートカット設定バージョンは次のようなものです。
public MenuItem ( string text, EventHandler onClick, Shortcut shortcut )shortcutに、Shortcut列挙体のメンバの一つを指定します。
では、サンプルを見てみましょう。
// menu03.cs using System; using System.Drawing; using System.Windows.Forms; class menu03 { public static void Main() { MyForm mf = new MyForm(); Application.Run(mf); } } class MyForm : Form { public MyForm() { Text = "猫でもわかるプログラミング"; BackColor = SystemColors.Window; MenuItem miOpen = new MenuItem("開く(&O)", new EventHandler(miOpenClick), Shortcut.CtrlO); MenuItem miAllSave = new MenuItem("すべてを保存(&L)", new EventHandler(miAllSaveClick), Shortcut.CtrlShiftS); MenuItem miFile = new MenuItem("ファイル(&F)", new MenuItem[] { miOpen, miAllSave }); Menu = new MainMenu(new MenuItem[] { miFile }); } void miOpenClick(object sender, EventArgs e) { MessageBox.Show("「開く」が選択されました", Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miAllSaveClick(object sender, EventArgs e) { MessageBox.Show("「すべてを保存」が選択されました", Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } }実行結果は、次のようになります。
メニュー項目のテキストの「Ctrl + O」などは、自動的に付加されます。
Update 04/Nov/2006 By Y.Kumei