第60章 いろいろなツールバーボタン


この章では、ツールバーボタンをフラットにしたり、ボタンに文字を表示したりします。 また、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は、ツールチップに表示するテキストの配列です。

順番に見ていくと、シンプルな仕組のプログラムですね。

実行結果は次のようになります。

デフォルトでは、テキストはボタンの下方に表示されます。



メニューの「表示」「文字を右に」でテキストは右方に表示されます。

この時、ボタンの横幅が長くなるため、一列で表示できなくなります。 デフォルトではボタンが折り返され、二列に表示されます。



メインフォームのサイズを変更して、横にのばすとボタンは一列表示になります。



「表示」「フラット」を選択するとフラットボタンになります。



ボタンがフラットの状態で、文字を下方に表示したところです。




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

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