ツールバーのボタンをフラットにするには、ToolBarのAppearanceプロパティをToolBarAppearance.Flatに設定します。また、通常のボタン(デフォルト)にするには、ToolBarAppearance.Normalに設定します。
public ToolBarAppearance Appearance { get; set; }ToolBarAppearance列挙体のメンバはFlatと、Normalの2つだけです。
ボタンに文字を付け加えたい場合は、ToolBarButton.Textプロパティにテキストを設定します。
public string Text { get; set; }この、文字列をボタンの下方に表示したいときは、ToolBar.ToolBarTextAlignプロパティをToolBarTextAlign.Underneath(デフォルト)に設定し、右に表示したいときはToolBarTextAlign.Rightに設定します。 ToolBarTextAlign列挙体のメンバは、RightとUnderneathの2つです。
さて、普通のアプリケーションでは、メニューとツールバーを備えていることが多いですね。そして、すべてのよく使うメニュー項目に対応したツールバーボタンが備えられているのが普通です。つまり、メニュー項目の数より、ツールバーボタンの数の方が少ないのが一般的です。
メニューでは、選択されたメニュー項目に対応したハンドラが呼び出されます。ツールバーから選択された(ボタンが押された)項目の実行は、前章の方法で行うとメニューとは別個の呼び出しになってしまいます。そこで、ToolBarButton.Tagプロパティを利用します。
public Object Tag { get; set; }具体的には、ツールバーボタンを作るときに、
tbbtn.Tag = miOepn;のような感じで、メニュー項目とツールバーボタンを関連づけておきます。そして、ToolBar.ButtonClickイベントに応答するハンドラ内で次のように応答します。
void tb_ButtonClick(object sender, ToolBarButtonClickEventArgs e) { ToolBarButton tbb = e.Button; MenuItem mi = (MenuItem)tbb.Tag; mi.PerformClick(); }MenuItem.PerformClickメソッドは、次のように定義されています。
public void PerformClick ()PerformClickメソッドは、MenuItemのClickイベントを生成します。
では、サンプルのプログラムを見てみましょう。イメージリストは前章のものを流用しています。
// toolbar02.cs using System; using System.Drawing; using System.Windows.Forms; class toolbar02 : Form { ToolBar tb; ToolBarButton[] tbbtn; String[] tooltxt, tiptxt; MenuItem[] mi; MenuItem miFlat, miNormal, miUnder, miRight; public static void Main() { Application.Run(new toolbar02()); } public toolbar02() { Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; tooltxt = new string[5] { "開く", "切り取り", "削除", "検索", "ヘルプ" }; tiptxt = new string[5] { "開きます", "カットします", "削除します", "検索します", "ヘルプを表示します" }; mi = new MenuItem[5]; MainMenu mm = new MainMenu(); Menu = mm; MenuItem miFile = new MenuItem(); miFile.Text = "ファイル(&F)"; mm.MenuItems.Add(miFile); MenuItem miEdit = new MenuItem(); miEdit.Text = "編集(&E)"; mm.MenuItems.Add(miEdit); MenuItem miView = new MenuItem(); miView.Text = "表示(&V)"; mm.MenuItems.Add(miView); MenuItem miHelp = new MenuItem(); miHelp.Text = "ヘルプ(&H)"; mm.MenuItems.Add(miHelp); MenuItem miOpen = new MenuItem(); miOpen.Text = "開く(&O)"; miOpen.Click += new EventHandler(miOpen_Click); miFile.MenuItems.Add(miOpen); mi[0] = miOpen; MenuItem miCut = new MenuItem(); miCut.Text = "切り取り(&T)"; miCut.Click += new EventHandler(miCut_Click); miEdit.MenuItems.Add(miCut); mi[1] = miCut; MenuItem miDelete = new MenuItem(); miDelete.Text = "削除(&D)"; miDelete.Click += new EventHandler(miDelete_Click); miEdit.MenuItems.Add(miDelete); mi[2] = miDelete; MenuItem miSearch = new MenuItem(); miSearch.Text = "検索(&F)"; miSearch.Click += new EventHandler(miSearch_Click); miEdit.MenuItems.Add(miSearch); mi[3] = miSearch; MenuItem miAbout = new MenuItem(); miAbout.Text = "バージョン情報"; miAbout.Click += new EventHandler(miAbout_Click); miHelp.MenuItems.Add(miAbout); mi[4] = miAbout; miUnder = new MenuItem(); miUnder.Text = "文字を下に"; miUnder.Click += new EventHandler(miUnder_Click); miView.MenuItems.Add(miUnder); miRight = new MenuItem(); miRight.Text = "文字を右に"; miRight.Click += new EventHandler(miRight_Click); miView.MenuItems.Add(miRight); miFlat = new MenuItem(); miFlat.Text = "フラット"; miFlat.Click += new EventHandler(miFlat_Click); miView.MenuItems.Add(miFlat); miNormal = new MenuItem(); miNormal.Text = "ノーマル"; miNormal.Click += new EventHandler(miNormal_Click); miView.MenuItems.Add(miNormal); miNormal.Enabled = false; miUnder.Enabled = false; tbbtn = new ToolBarButton[5]; tb = new ToolBar(); tb.Parent = this; tb.Appearance = ToolBarAppearance.Normal; tb.TextAlign = ToolBarTextAlign.Underneath; tb.ButtonClick += new ToolBarButtonClickEventHandler(tb_ButtonClick); ImageList iList = new ImageList(); Bitmap bmp = new Bitmap(GetType(), "toolbar02.tool02.bmp"); iList.Images.AddStrip(bmp); iList.TransparentColor = Color.Red; tb.ImageList = iList; for (int i = 0; i < 5; i++) { tbbtn[i] = new ToolBarButton(); tb.Buttons.Add(tbbtn[i]); tbbtn[i].ImageIndex = i; tbbtn[i].Text = tooltxt[i]; tbbtn[i].ToolTipText = tiptxt[i]; tbbtn[i].Tag = mi[i]; } } void miOpen_Click(object sender, EventArgs e) { MessageBox.Show(tooltxt[0] + "が選択されました", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miCut_Click(object sender, EventArgs e) { MessageBox.Show(tooltxt[1] + "が選択されました", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miDelete_Click(object sender, EventArgs e) { MessageBox.Show(tooltxt[2] + "が選択されました", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miSearch_Click(object sender, EventArgs e) { MessageBox.Show(tooltxt[3] + "が選択されました", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miAbout_Click(object sender, EventArgs e) { MessageBox.Show("toolbar02.exe", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } void miUnder_Click(object sender, EventArgs e) { tb.TextAlign = ToolBarTextAlign.Underneath; miUnder.Enabled = false; miRight.Enabled = true; } void miRight_Click(object sender, EventArgs e) { tb.TextAlign = ToolBarTextAlign.Right; miRight.Enabled = false; miUnder.Enabled = true; } void miFlat_Click(object sender, EventArgs e) { tb.Appearance = ToolBarAppearance.Flat; miFlat.Enabled = false; miNormal.Enabled = true; } void miNormal_Click(object sender, EventArgs e) { tb.Appearance = ToolBarAppearance.Normal; miNormal.Enabled = false; miFlat.Enabled = true; } void tb_ButtonClick(object sender, ToolBarButtonClickEventArgs e) { ToolBarButton tbb = e.Button; MenuItem mi = (MenuItem)tbb.Tag; mi.PerformClick(); } }tooltxtは、ツールバーにつけるテキストの配列です。
tiptxtは、ツールチップに表示するテキストの配列です。
順番に見ていくと、シンプルな仕組のプログラムですね。
実行結果は次のようになります。
デフォルトでは、テキストはボタンの下方に表示されます。
メニューの「表示」「文字を右に」でテキストは右方に表示されます。
この時、ボタンの横幅が長くなるため、一列で表示できなくなります。 デフォルトではボタンが折り返され、二列に表示されます。
メインフォームのサイズを変更して、横にのばすとボタンは一列表示になります。
「表示」「フラット」を選択するとフラットボタンになります。
ボタンがフラットの状態で、文字を下方に表示したところです。
Update 27/Apr/2007 By Y.Kumei