第21章 一つのイベントハンドラで全部処理する


メニュー項目がクリックされると、それに対応したイベントハンドラが実行されるのが普通です。



しかし、時には似たような処理をする時、それぞれに異なるハンドラを用意しなくてもよい場合があります。

どのメニュー項目がクリックされたかは、ハンドラの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)」というように、&がそのまま表示されてしまいますね。




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

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