メニュー項目がクリックされると、それに対応したイベントハンドラが実行されるのが普通です。
しかし、時には似たような処理をする時、それぞれに異なるハンドラを用意しなくてもよい場合があります。
どのメニュー項目がクリックされたかは、ハンドラの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