第57章 ステータスバーを少し実用的に使う


ステータスバーには、選択されたメニュー項目の説明などを表示するのが普通です。



この章では、メニュー項目が選択されたとき、その説明をステータスバーに表示するプログラムを作ります。

メニュー項目が選択されたことを知るには、MenuItemクラスのSelectイベントを処理します。MenuItem.Selectイベントは、次のように定義されています。

public event EventHandler Select
このイベントは、親メニューに関しては発生しません。

さて、選択されたメニュー項目が実行されたり、あるいはキャンセルされたときは、ステータスバーに表示された内容を消さなくてはなりません。これは、どうするかというと、MenuItemクラスのイベントを調べても解決しません。

Form.MenuCompleteイベントを利用します。これは、フォームのメニューがフォーカスを失ったときに発生します。

Formクラスから派生したクラスでは、Form.OnMenuCompleteイベントハンドラが利用できます。

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

// status06.cs

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

class status06 : Form
{
    StatusBarPanel sb1, sb2;

    public static void Main()
    {
        Application.Run(new status06());
    }

    public status06()
    {
        Text = "猫でもわかるC#プログラミング";
        BackColor = SystemColors.Window;

        StatusBar sb = new StatusBar();
        sb.Parent = this;
        sb.ShowPanels = true;
        sb1 = new StatusBarPanel();
        sb2 = new StatusBarPanel();
        sb1.AutoSize = StatusBarPanelAutoSize.Contents;
        sb2.AutoSize = StatusBarPanelAutoSize.Spring;

        sb.Panels.Add(sb1);
        sb.Panels.Add(sb2);

        MenuItem miFile = new MenuItem("ファイル(&F)");
        MenuItem miEdit = new MenuItem("編集(&E)");

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

        mm.MenuItems.Add(miFile);
        mm.MenuItems.Add(miEdit);

        MenuItem miNew = new MenuItem("新規作成(&N)");
        miNew.Click += new EventHandler(miNew_Click);
        miNew.Select += new EventHandler(miNew_Select);
        miFile.MenuItems.Add(miNew);

        MenuItem miExit = new MenuItem("終了(&X)");
        miExit.Click += new EventHandler(miExit_Click);
        miExit.Select += new EventHandler(miExit_Select);
        miFile.MenuItems.Add(miExit);

        MenuItem miCopy = new MenuItem("コピー(&C)");
        miCopy.Click += new EventHandler(miCopy_Click);
        miCopy.Select += new EventHandler(miCopy_Select);
        miEdit.MenuItems.Add(miCopy);
    }

    void miNew_Select(object sender, EventArgs e)
    {
        sb1.Text = "新規に作成します";
    }

    void miNew_Click(object sender, EventArgs e)
    {
        MessageBox.Show("「新規作成」が選択されました",
            "猫でもわかるC#プログラミング",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }

    void miExit_Select(object sender, EventArgs e)
    {
        sb1.Text = "このプログラムを終了します";
    }

    void miExit_Click(object sender, EventArgs e)
    {
        Close();
    }

    void miCopy_Select(object sender, EventArgs e)
    {
        sb1.Text = "コピーします";
    }

    void miCopy_Click(object sender, EventArgs e)
    {
        MessageBox.Show("「コピー」が選択されました",
            "猫でもわかるC#プログラミング",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }

    protected override void OnMenuComplete(EventArgs e)
    {
        base.OnMenuComplete(e);
        sb1.Text = "";
    }
}
status06クラスはFormクラスから継承されています。

コンストラクタでは、StatusBarオブジェクトとStatusBarPanelオブジェクトを生成しています。

また、メニューを作るときに、それぞれのメニュー項目に対して、異なる名前のSelectイベントハンドラをインストールしている点に注意してください。

status06クラスは、Formクラスから継承しているので、OnMenuCompleteメソッドを利用しています。

実行結果は次のようになります。

選択されたメニュー項目の説明が、ステータスバーに表示されています。




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

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