第22章 別な方法でメニューを作る


この章ではMenuItemクラスについてもう少し詳しく見てみます。



このクラスのプロパティを見ていくと次のようなものがあります。

public string Text {get; set;}
public Shortcut Shortcut {get; set;}
public int Index {get; set;}
Textは、メニュー項目のキャプションの取得・設定を行います。

Shortcutは、メニュー項目のショートカットの取得・設定を行います。

Indexは、親メニュー内のメニュー項目の位置(0から始まる)を取得・設定します。

さらに、次のような興味深いプロパティもあります。

public MenuItemCollection MenuItems {get;}
これは、Menuクラスから継承されていて、MenuItemオブジェクトのコレクションを取得します。

MenuItemCollectionクラスには、Clear,Add,Removeメソッドをメンバに持っています。

Addメソッドは、メニュー項目を追加し、Removeメソッドはメニュー項目を削除します。 Clearメソッドは、コレクションからすべてのメニュー項目を削除します。

Addメソッドには、5つのオーバーロードバージョンがありますが、この章で使うのは

public virtual int Add (
	MenuItem item
)
で、itemを追加します。

いままでは、サブメニューから作って、最後にメインメニューを構築していました。

Addメソッドを利用することにより、メインメニューから作り始めることができます。

まず、

MainMenu mm = new MainMenu();
で、空のメインメニューを作ります。次にこのメインメニューに追加したいメニュー項目を作ります。
MenuItem miFile = new MenuItem();
miFile.Text = "ファイル(&F)";
miFile.Index = 0;
そして、Addメソッドでメインメニューに追加します。
mm.MenuItems.Add(miFile);
さて、メニュー項目をクリックしたときイベントハンドラを実行したいときは、 MenuItemクラスのClickイベントをハンドラに関連づけます。
MenuItem miOpen = new MenuItem();
miOpen.Text = "開く(&O)";
miOpen.Index = 0;
miOpen.Click += new EventHandler(OnMyClick);
miOpen.Shortcut = Shortcut.CtrlO;
miFile.MenuItems.Add(miOpen);
なお、Indexプロパティを指定しない場合は、Addメソッドはそのメニュー項目を末尾に追加します。

では、サンプルを見てみましょう。

// menu05.cs

using System;
using System.Drawing;
using System.Windows.Forms;

class menu05 : Form
{
    static string Title = "猫でもわかるプログラミング";

    public static void Main()
    {
        menu05 m5 = new menu05();
        Application.Run(m5);
    }

    public menu05()
    {
        Text = Title;
        BackColor = SystemColors.Window;

        EventHandler eh = new EventHandler(OnMyClick);

        MainMenu mm = new MainMenu();
        Menu = mm;

        MenuItem miFile = new MenuItem();
        miFile.Text = "ファイル(&F)";
        miFile.Index = 0;
        mm.MenuItems.Add(miFile);

        MenuItem miEdit = new MenuItem();
        miEdit.Text = "編集(&E)";
        miEdit.Index = 1;
        mm.MenuItems.Add(miEdit);

        MenuItem miOpen = new MenuItem();
        miOpen.Text = "開く(&O)";
        miOpen.Index = 0;
        miOpen.Click += eh;
        miOpen.Shortcut = Shortcut.CtrlO;
        miFile.MenuItems.Add(miOpen);

        MenuItem miExit = new MenuItem();
        miExit.Text = "終了(&X)";
        miExit.Index = 1;
        miExit.Click += eh;
        miFile.MenuItems.Add(miExit);

        MenuItem miCopy = new MenuItem();
        miCopy.Text = "コピー(&C)";
        miCopy.Index = 0;
        miCopy.Click += eh;
        miCopy.Shortcut = Shortcut.CtrlC;
        miEdit.MenuItems.Add(miCopy);
    }

    static void OnMyClick(object sender, EventArgs e)
    {
        MessageBox.Show(((MenuItem)sender).Text,
            Title,
            MessageBoxButtons.OK, 
            MessageBoxIcon.Asterisk);
    }
}
実行結果は次のようになります。




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

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