やはり、フォームにはメニューが無いと変ですね。
今回は、最も簡単なメニューの作り方を紹介します。
メニューには、最初から「ファイル」とか「編集」などのように見えている部分があります。これをメインメニューといいます。そして、「ファイル」をクリックすると「上書き保存」などのメニューが現れてきます。これをサブメニューといいます。サブメニューからさらに下位ののサブメニューが出てくることもあります。
「ファイル」とか「編集」とか「上書き保存」などをメニュー項目といいます。
まずは、メニュー項目を作ります。これには、MenuItemクラスのコンストラクタを使うと簡単です。MenuItemクラスの継承関係は次のようになっています。
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Menu
System.Windows.Forms.MenuItem
Menuクラスは抽象クラスです。抽象クラスについて忘れてしまった人は、コンソール編第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