この章では、ツールバーボタンをフラットにしたり、ボタンに文字を表示したりします。
また、Tagプロパティを利用したプログラムも作ってみます。
ツールバーのボタンをフラットにするには、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