第53章 ステータス・バーにパネルを付ける


実際のプログラミングでは、ステータスバーにStatusBarPanelを貼り付けて、 これに、テキスト等を表示するのが一般的です。



ステータスバーは、一般にいくつかの小部屋に仕切られていることが多いですね。

C#では、この小部屋はStatusBarPanelクラスから作ります。

StatusBarPanelクラスの継承関係は次のようになっています。

System.Object 
   System.MarshalByRefObject 
     System.ComponentModel.Component 
      System.Windows.Forms.StatusBarPanel
このクラスのプロパティをいくつか紹介しておきます。 StatusBarPanel.Textプロパティは、ステータスバー・パネルのテキストを取得・設定します。

StatusBarPanel.Widthプロパティは、ステータスバー・パネルの幅を取得・設定します。 MinWidthプロパティより小さい値には設定できません。

StatusBarPanel.MinWidthプロパティは、ステータスバー・パネルの最小幅の取得・設定を行います。

StatusBarPanel.AutoSizeプロパティは、ステータスバー・パネルの自動サイズ調整されるかどうかの値の取得・設定をします。

public StatusBarPanelAutoSize AutoSize { get; set; }
StatusBarPanelAutoSize列挙体のメンバには、次のようなものがあります。

メンバ名意味
Contents幅は、その内容によって決まる
NoneStatusBarのサイズが変更されても、サイズ変更を行わない
Spring使用できる領域を、他のSpringを設定しているステータスバー・パネルと共有する

StatusBarPanel.Parentプロパティは、パネルを格納しているStatusBarを取得します。取得だけで設定はできない点に注意してください。

ステータスバーに、ステータスバー・パネルを貼り付けるには、StatusBarクラスのPanelsプロパティを利用します。StatusBar.Panelsプロパティはコレクションクラスの一つで、Add, AddRange, Insert, Removeメソッドを持っています。

では、簡単なサンプルを見てみましょう。クライアント領域を右または左クリックするとそのクリック数をステータスバー・パネルに表示するプログラムです。

// status02.cs

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

class status02 : Form
{
    StatusBar sb;
    int no1, no2;

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

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

        no1 = 0;
        no2 = 0;

        sb = new StatusBar();
        sb.Parent = this;
        sb.ShowPanels = true;

        StatusBarPanel sbp1 = new StatusBarPanel();
        sb.Panels.Add(sbp1);

        StatusBarPanel sbp2 = new StatusBarPanel();
        sb.Panels.Add(sbp2);
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        string str;

        if (e.Button == MouseButtons.Left)
        {
            no1++;
            str = string.Format("Left:{0}", no1);
            sb.Panels[0].Text = str;
        }
        else if (e.Button == MouseButtons.Right)
        {
            no2++;
            str = string.Format("Right:{0}", no2);
            sb.Panels[1].Text = str;
        }
        else
            return;
    }
}
このプログラム全体は、ただ一つのstatus02クラスからなっています。そして、このクラスはFormクラスから派生しています。

status02クラスは、sbというフィールドを持っている点に注意してください。 Mainメソッドは、いつも通りです。

コンストラクタで、StatusBarオブジェクトを生成して、その参照をsbフィールドに代入しています。これで、このクラスでは、どこからでもsbを利用できます。

sb.Parentをこのクラスに設定して、フォームにステータスバーを付けます。

sb.ShowPanelsプロパティをtrueに設定します。

次に、StatusBarPanelオブジェクトを生成しています。

sb.Panels.Addでステータスバーにステータスバー・パネルを付けています。

これで、メインフォームとステータスバー、ステータスバー・パネルができました。

次に、クライアント領域がクリックされたと時の処理をしなくてはいけません。

これは、FormクラスのOnMouseDownメソッドをオーバーライドすればよいですね。 OnMouseDownメソッド内では、引数のMouseEventArgsクラスのButtonプロパティで場合分けしています。

左ボタンが押されたときは、no1を1増やして、sb.Panels[0]にクリック数を表示します。

同様に右ボタンが押されたときは、no2を1増やして、sb.Panels[1]にクリック数を表示しています。

では、実行結果を見てみましょう。

左右のクリック数の累計が、ステータスバー・パネルに表示されます。




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

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