第59章 ツールバーを付けてみる


ツールバーを付けるのはC#では、簡単です。ここでは、ToolBarクラスとToolBarButtonクラスを利用してツールバーを作ってみます。(注:C#2.0以降では、もっと改良されたクラスを使います)



まずは、ToolBarクラスの継承関係を見てみましょう。

System.Object 
   System.MarshalByRefObject 
     System.ComponentModel.Component 
       System.Windows.Forms.Control 
        System.Windows.Forms.ToolBar
フォームにツールバーを取り付けるには、ToolBarクラスのオブジェクトを生成して、Parentプロパティに、フォームを指定します。

次にイメージリストをツールバーに関連づける必要があります。イメージリストは、同じサイズのイメージの集まりです。具体的にはImageListクラスを利用します。イメージリストは、同じサイズ(縦・横)で、色数の同じイメージの集まりです。

ツールバーの場合、通常は16*16のイメージを複数個もつイメージリストを使います。もちろん、これ以外のサイズでも可能です。

ここでは、16*80(16*16のビットマップが5つ)のビットマップを用意して、リソースとしてプロジェクトに加えておきます。()

この方法については、第16章を参照してください。

また、ビットマップで透明化したい部分を、わかりやすい色で塗りつぶしておきます。ここでは、赤色で塗りつぶすことにしました。

ビットマップ・ストリップをイメージリストに追加するには、ImageList.ImageCollection.AddStripメソッドを使います。

public int AddStrip (
	Image value
)
valueには、追加するBitmapを指定します。

したがって、イメージストリップをイメージリストに追加するには次のような感じになります。

Bitmap bmp = new Bitmap(GetType(), "toolbar01.tool01.bmp");
ImageList ilst = new ImageList();
ilst.Images.AddStrip(bmp);
Imagesは、ImageList.ImageCollectionを取得します。

透明色を指定するには、ImageListクラスのTransparentColorプロパティで指定します。ここでは、赤を透明色に下ので

ilst.TransparentColor = Color.Red;
と、します。

イメージリストができたら、これをツールバーのImageListプロパティに指定します。

また、ToolBarクラスのShowToolTipsプロパティがtrueだと、ツールチップを表示することができます。(デフォルトでtrue)

次に、ツールバーに乗せるボタンを作成します。これは、ToolBarButtonクラスを利用します。

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

System.Object 
   System.MarshalByRefObject 
     System.ComponentModel.Component 
      System.Windows.Forms.ToolBarButton
ToolBarButtonオブジェクトができたら、ToolBarButtonクラスのImageIndexプロパティによりどのイメージを、そのボタンに割り当てるかを指定します。(0番から始まる)

ToolTipTextプロパティを指定すると、マウスがそのボタンをポイントしたとき、ツールチップでそのテキストが表示されます。

ツールバーボタンを、ツールバーに加えるには、次のようにします。

tbb1 = new ToolBarButton();
tb.Buttons.Add(tbb1); //tbはToolBarの参照
Buttonsプロパティは、ToolBarButtonCollectionを取得します。

さて、これでツールバーにボタンが表示されるようになりましたが、ボタンをクリックしたときの、応答はどうすればよいのでしょうか。ToolBarButtonクラスにはClickイベントはありません。

実は、これはToolBarクラスの方で指定します。ToolBarクラスのButtonClickイベントにデリゲートを割り当てます。

public event ToolBarButtonClickEventHandler ButtonClick
public delegate void ToolBarButtonClickEventHandler (
	Object sender,
	ToolBarButtonClickEventArgs e
)
ToolBarButtonClickEventArgsクラスのButtonプロパティで、どのボタンが押されたかがわかります。また、ToolBarButtonCollectionクラスのIndexOfメソッドを使うと、何番目のボタンが押されたかがわかります。(0番から始まる)

さて、これでボタンのクリックに応答できるようになりました。簡単なサンプルを見てみましょう。

// toolbar01.cs

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

class toolbar01 : Form
{
    ToolBarButton tbb1, tbb2, tbb3, tbb4, tbb5;
    ToolBar tb;
    String[] tbstring = { "open", "cut", "delete", "find", "help" };
    String str;

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

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

        tb = new ToolBar();
        tb.Parent = this;
        tb.ButtonClick += new ToolBarButtonClickEventHandler(tb_ButtonClick);
        tb.BorderStyle = BorderStyle.Fixed3D;

        Bitmap bmp = new Bitmap(GetType(), "toolbar01.tool01.bmp");
        ImageList ilst = new ImageList();
        ilst.Images.AddStrip(bmp);
        ilst.TransparentColor = Color.Red;

        tb.ImageList = ilst;
        tb.ShowToolTips = true;

        tbb1 = new ToolBarButton();
        tbb1.ImageIndex = 0;
        tbb1.ToolTipText = tbstring[0];
        tb.Buttons.Add(tbb1);
        

        tbb2 = new ToolBarButton();
        tbb2.ImageIndex = 1;
        tbb2.ToolTipText = tbstring[1];
        tb.Buttons.Add(tbb2);
        
        tbb3 = new ToolBarButton();
        tbb3.ImageIndex = 2;
        tbb3.ToolTipText = tbstring[2];
        tb.Buttons.Add(tbb3);

        tbb4 = new ToolBarButton();
        tbb4.ImageIndex = 3;
        tbb4.ToolTipText = tbstring[3];
        tb.Buttons.Add(tbb4);

        tbb5 = new ToolBarButton();
        tbb5.ImageIndex = 4;
        tbb5.ToolTipText = tbstring[4];
        tb.Buttons.Add(tbb5);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g;
        g = e.Graphics;
        g.DrawString(str, new Font("MS ゴシック", 14),
            Brushes.Blue, new PointF(10F, 30F));
    }

    void tb_ButtonClick(object sender, ToolBarButtonClickEventArgs e)
    {
        str = String.Format("{0}が選択されました",
            tbstring[tb.Buttons.IndexOf(e.Button)]);
        Invalidate();
    }
}
実行結果は、次のようになります。

古典的なツールバーですね。



ボタンに、マウスをポイントすると、ツールチップが表示されます。



ボタンをクリックすると、どのボタンが押されたかが、クライアント領域に表示されます。




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

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