メニュー項目がクリックされると、それに対応したイベントハンドラが実行されるのが普通です。
しかし、時には似たような処理をする時、それぞれに異なるハンドラを用意しなくてもよい場合があります。
どのメニュー項目がクリックされたかは、ハンドラのobject senderを調べるとわかります。 では、簡単な例を見てみましょう。
// menu04.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class menu04
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Text = "猫でもわかるプログラミング";
        fm.BackColor = SystemColors.Window;
        EventHandler evh = new EventHandler(OnEvent);
        MenuItem miNew = new MenuItem("新規(&N)", evh, Shortcut.CtrlN);
        MenuItem miOpen = new MenuItem("開く(&O)", evh);
        MenuItem miExit = new MenuItem("終了(&X)", evh);
        MenuItem[] mis = new MenuItem[]{miNew, miOpen, miExit};
        MenuItem miFile = new MenuItem("ファイル(&F)", mis);
        fm.Menu = new MainMenu(new MenuItem[]{miFile});
        Application.Run(fm);
    }
    static void OnEvent(object sender, EventArgs e)
    {
        MenuItem mi = (MenuItem)sender;
        MessageBox.Show(mi.Text, "猫でもわかるプログラミング",
            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}
このプログラムは、クリックされたメニュー項目のテキストをメッセージボックスで表示するものです。「新規」「開く」「終了」のメニュー項目に関連づけられたイベントハンドラはOnEventメソッドのみです。
OnEventメソッドでは、senderをMenuItemにキャストしています。これが、クリックされたMenuItemオブジェクトを表しています。
実行結果は次のようになります。
「新規」をクリックすると・・・
「新規(&N)」というように、&がそのまま表示されてしまいますね。
Update 05/Nov/2006 By Y.Kumei