ツールバーを付けるのは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();
    }
}
実行結果は、次のようになります。
古典的なツールバーですね。
ボタンに、マウスをポイントすると、ツールチップが表示されます。
ボタンをクリックすると、どのボタンが押されたかが、クライアント領域に表示されます。
Update 14/Apr/2007 By Y.Kumei