今回は、最も簡単なメニューの作り方を紹介します。
メニューには、最初から「ファイル」とか「編集」などのように見えている部分があります。これをメインメニューといいます。そして、「ファイル」をクリックすると「上書き保存」などのメニューが現れてきます。これをサブメニューといいます。サブメニューからさらに下位ののサブメニューが出てくることもあります。
「ファイル」とか「編集」とか「上書き保存」などをメニュー項目といいます。
まずは、メニュー項目を作ります。これには、MenuItemクラスのコンストラクタを使うと簡単です。MenuItemクラスの継承関係は次のようになっています。
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Windows.Forms.Menu System.Windows.Forms.MenuItemMenuクラスは抽象クラスです。抽象クラスについて忘れてしまった人は、コンソール編第44章を参照してください。
MenuItemクラスのコンストラクタは6つのオーバーロードバージョンがあります。
今回使用するバージョンは、次のようなものです。
public MenuItem ( string text, EventHandler onClick )textは、メニュー項目のテキストです。
onClickは、このメニュー項目のClickイベントを処理するイベントハンドラです。
では、「テスト(&T)」(&Tは、Tに下線が付き、Tキーを押すとこの項目をクリックしたのと同じ効果が得られます。)というテキストを持ったメニュー項目を作ってみましょう。
MenuItem miTest = new MenuItem("テスト(&T)", new EventHandler(miTestClick));こうすると、このメニュー項目がクリックされるとmiTestClickイベントハンドラが実行されます。
次に、フォームのMenuプロパティに、このメニュー項目を指定します。これには、MainMenuクラスのコンストラクタを使います。MainMenuクラスは、MenuItemクラスと同じ祖先を持ちます。
MainMenuクラスのコンストラクタには、3つのオーバーロードバージョンがありますが、今回使用するのは、次のようなものです。
public MainMenu ( MenuItem[] items )itemsは、MainMenuに追加されるMenuItemオブジェクトの配列です。従って先ほど作ったメニュー項目を追加するには、
Menu = new MainMenu(new MenuItem[]{miTest});とすれば、よいですね。ちなみにFormクラスのMenuプロパティは次のように定義されています。
public MainMenu Menu { get; set; }では、サンプルを見てみましょう。
// menu01.cs using System; using System.Drawing; using System.Windows.Forms; class menu01 { public static void Main() { MyClass mc = new MyClass(); Application.Run(mc); } } class MyClass : Form { public MyClass() { Text = "猫でもわかるプログラミング"; BackColor = SystemColors.Window; MenuItem miTest = new MenuItem("テスト(&T)", new EventHandler(miTestClick)); Menu = new MainMenu(new MenuItem[]{miTest}); } void miTestClick(object sender, EventArgs e) { MessageBox.Show("テスト成功!", "猫でもわかるプログラミング", MessageBoxButtons.OK, MessageBoxIcon.Information); } }実行結果は、次のようになります。
「テスト」メニュー項目をクリックすると、「テスト成功」というメッセージボックスが出現します。
左のようなメッセージボックスが出現したら成功です。
Update 02/Nov/2006 By Y.Kumei