このクラスのプロパティを見ていくと次のようなものがあります。
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