C# Programming

Image

ツールバー

開発環境: Visual Studio 2003 

次のような機能のForm アプリケーションを作る。

  • ツールバーに画像を表示する。
  • ツールバーにより、プログレスバーの値を変更する。
  • 同時にステータスバーにツールバーにプログレスバーの値と、どちらのボタンが押されたかを表示する。
ステータスバーにプログレスバーを表示する方法はこちら。
.Net/C# eGroup で深川さんからおしえていただいた方法をまとめてみました。

元ネタはこちら。
http://groups.yahoo.co.jp/group/dotnet-csharp/message/484
Image

ノータッチデプロイメントはこちら
ToolBar.exe
1. ファイル新規作成より、Windows アプリケーションを選択する。
2. ツールボックスより、ToolBar, ImageList, StatusBar を貼り付ける。

3, ToolBar のボタンの追加
ToolBar のプロパティのButtons コレクションの...ボタンをクリックする。(下図参照)
Image

すると、次のようなImageコレクションエディタが起動する。
そこで、追加ボタンを押すことにより、自動的にボタンが追加される。ここでは、矢印用に2つのボタン登録する。(下図)
それから、どちらのボタンが押されたのか判断するために、Tag プロパティに、"Right", "Left"と入力しておく。
Image

3, ToolBar にImageListを割り当てる。

このままでは、文字列のToolBar ボタンが表示されているので、ボタンに画像を貼り付ける。
このために、ToolBarのImageList プロパティをセットする。
下図のように、ToolBarのImageList プロパティは、プルダウンで選べるようになっているので、imageList1を選択する。
Image

4. ImageListに画像を割り当てる。

このままでは、ImageList には画像は割り当てられてないので、画像を割り当てる。
imageList1のプロパティのImages コレクションの...ボタンをクリックし Image コレクションエディタを起動する。

ここでは、あらかじめ作っておいた矢印の画像を追加する。
追加ボタンを押すと、自動的にボタンが追加される。
Image

ここまでくれば、つぎのようなフォームデザインができる。

Image

同様に、ステータスバーのプロパティのパネルコレクションから、パネルを3つ貼り付ける。
これも簡単なので、省略。

あとは、ProgressBar を貼り付けて、イベントが発生したらば ProgressBar.Value を変更すればOK.

ツールバーのどのボタンが押されたのか判定する方法
ToolBarのイベントは、ボタンごとではなく、ToolBar そのものに発生するので、
次のように、どのボタンが押されたのか判断して、その処理を行う必要があります。
どのツールバーのボタンが押されたのか判断するには、
ToolBar のButtonClick イベントハンドラを追加して、次のようにします。
(1) ボタンで判断する方法
// ボタンで判断する方法
if (e.Button == this.toolBarButton1)

   ・・・・
(2) ToolBarButton の Tagで判断する方法
// ToolBarButton の Tag に文字列をセットしておいて、それで判断する方法
if ((string)e.Button.Tag == "Right")
   ・・・・

注意
ProgressBar は、Minimum, Maximum を超えると, ArgumentException があがるので、
超えないようにするか、例外処理をする必要があります。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace ToolBar
{
    /// <summary>
    /// Form1 の概要の説明です。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.ImageList imageList1;
        private System.Windows.Forms.ToolBar toolBar1;
        private System.Windows.Forms.ToolBarButton toolBarButton1;
        private System.Windows.Forms.ToolBarButton toolBarButton2;
        private System.Windows.Forms.ProgressBar progressBar1;
        private System.Windows.Forms.StatusBar statusBar1;
        private System.Windows.Forms.StatusBarPanel statusBarPanel1;
        private System.Windows.Forms.StatusBarPanel statusBarPanel2;
        private System.Windows.Forms.StatusBarPanel statusBarPanel3;
        private System.ComponentModel.IContainer components;

        public Form1()
        {
            //
            // Windows フォーム デザイナ サポートに必要です。
            //
            InitializeComponent();

            //
            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
            //
        }

        /// <summary>
        /// 使用されているリソースに後処理を実行します。
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows フォーム デザイナで生成されたコード 
        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
            this.imageList1 = new System.Windows.Forms.ImageList(this.components);
            this.toolBar1 = new System.Windows.Forms.ToolBar();
            this.toolBarButton1 = new System.Windows.Forms.ToolBarButton();
            this.toolBarButton2 = new System.Windows.Forms.ToolBarButton();
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.statusBar1 = new System.Windows.Forms.StatusBar();
            this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
            this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel();
            this.statusBarPanel3 = new System.Windows.Forms.StatusBarPanel();
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel3)).BeginInit();
            this.SuspendLayout();
            // 
            // imageList1
            // 
            this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
            this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
            // 
            // toolBar1
            // 
            this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
                                                                                        this.toolBarButton1,
                                                                                        this.toolBarButton2});
            this.toolBar1.DropDownArrows = true;
            this.toolBar1.ImageList = this.imageList1;
            this.toolBar1.Location = new System.Drawing.Point(0, 0);
            this.toolBar1.Name = "toolBar1";
            this.toolBar1.ShowToolTips = true;
            this.toolBar1.Size = new System.Drawing.Size(272, 28);
            this.toolBar1.TabIndex = 0;
            this.toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.OnButtonClick);
            // 
            // toolBarButton1
            // 
            this.toolBarButton1.ImageIndex = 0;
            this.toolBarButton1.Tag = "Left";
            // 
            // toolBarButton2
            // 
            this.toolBarButton2.ImageIndex = 1;
            this.toolBarButton2.Tag = "Right";
            // 
            // progressBar1
            // 
            this.progressBar1.Location = new System.Drawing.Point(24, 48);
            this.progressBar1.Name = "progressBar1";
            this.progressBar1.Size = new System.Drawing.Size(208, 23);
            this.progressBar1.TabIndex = 1;
            this.progressBar1.Value = 50;
            // 
            // statusBar1
            // 
            this.statusBar1.Location = new System.Drawing.Point(0, 88);
            this.statusBar1.Name = "statusBar1";
            this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
                                                                                          this.statusBarPanel1,
                                                                                          this.statusBarPanel2,
                                                                                          this.statusBarPanel3});
            this.statusBar1.ShowPanels = true;
            this.statusBar1.Size = new System.Drawing.Size(272, 22);
            this.statusBar1.TabIndex = 2;
            this.statusBar1.Text = "statusBar1";
            // 
            // statusBarPanel1
            // 
            this.statusBarPanel1.Text = "statusBarPanel1";
            // 
            // statusBarPanel2
            // 
            this.statusBarPanel2.Alignment = System.Windows.Forms.HorizontalAlignment.Center;
            this.statusBarPanel2.Text = "statusBarPanel2";
            // 
            // statusBarPanel3
            // 
            this.statusBarPanel3.Alignment = System.Windows.Forms.HorizontalAlignment.Right;
            this.statusBarPanel3.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
            this.statusBarPanel3.Text = "statusBarPanel3";
            this.statusBarPanel3.Width = 56;
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
            this.ClientSize = new System.Drawing.Size(272, 110);
            this.Controls.Add(this.statusBar1);
            this.Controls.Add(this.progressBar1);
            this.Controls.Add(this.toolBar1);
            this.Name = "Form1";
            this.Text = "Form1";
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel3)).EndInit();
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void OnButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
        {
            if ((string)e.Button.Tag == "Right")
            {
                this.statusBarPanel2.Text = "RightArrow";
                if(this.progressBar1.Value >= this.progressBar1.Maximum) // Out of Range しないようにする。
                    goto exit;  // 気持ち悪いけどこんなこともできる。
                this.progressBar1.Value ++;
                this.statusBarPanel1.Text = (this.progressBar1.Value).ToString();

            }
            else if (e.Button == this.toolBarButton1)
            {
                this.statusBarPanel2.Text = "LeftArrow";
                try 
                {
                    this.progressBar1.Value --;
                    this.statusBarPanel1.Text = (this.progressBar1.Value).ToString();
                }
                catch (ArgumentException exc) // または、Out of Range 時の例外をキャッチする。
                {
                    this.progressBar1.Value = 0;
                    this.statusBarPanel3.Text = exc.Message;
                }
            }
            exit:       // 気持ち悪いけどこんなこともできる。
                return;

        }
    }
}