まずは、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.ToolBarButtonToolBarButtonオブジェクトができたら、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