この章では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);
}
}
実行結果は次のようになります。
Update 06/Nov/2006 By Y.Kumei