第20章 ショートカット・キーを持つメニュー


メニュー項目のテキストで、「開く(O)... Ctrl + O」というような表示がよく見られます。



この、「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」などは、自動的に付加されます。




[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 04/Nov/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。