[C#] ToolStripイベントの使い方と活用法

C#のToolStripは、Windows Formsアプリケーションでツールバーを作成するためのコントロールです。

ToolStripイベントを活用することで、ユーザーの操作に応じた動作を実装できます。

例えば、Clickイベントを使用して、ボタンがクリックされたときに特定の処理を実行することが可能です。

また、ItemClickedイベントを利用すると、ToolStrip内のどのアイテムがクリックされたかを判別し、動的に処理を変更できます。

ToolStripは、メニューやショートカットを提供するために使われ、ユーザーインターフェースの操作性を向上させるのに役立ちます。

イベントハンドラを適切に設定することで、ユーザーの操作に応じた柔軟なアプリケーションを構築できます。

この記事でわかること
  • ToolStripの基本的な使い方
  • 各種イベントの種類と実装方法
  • ToolStripの応用例と活用法
  • カスタムToolStripの作成方法
  • 複数ToolStripの連携方法

目次から探す

ToolStripの基本的な使い方

ToolStripの追加方法

C#のWindowsフォームアプリケーションにToolStripを追加するには、以下の手順を実行します。

  1. Visual Studioでプロジェクトを開く。
  2. ツールボックスから ToolStrip を選択し、フォームにドラッグ&ドロップする。
  3. ToolStripがフォームに追加され、デフォルトのアイテムが表示されます。

サンプルコードは以下の通りです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
    }
}

このコードを実行すると、フォームにToolStripが表示されます。

ToolStripアイテムの追加

ToolStripにアイテムを追加するには、ToolStripButtonやToolStripDropDownButtonなどのアイテムを作成し、ToolStripに追加します。

以下は、ToolStripにボタンを追加するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
    }
}

このコードを実行すると、ToolStripに「ボタン1」が表示されます。

ToolStripのプロパティ設定

ToolStripのプロパティを設定することで、見た目や動作をカスタマイズできます。

主なプロパティには以下のようなものがあります。

スクロールできます
プロパティ名説明
DockToolStripの配置位置を設定
BackColor背景色を設定
ForeColorテキストの色を設定
RenderMode描画モードを設定

以下は、ToolStripのプロパティを設定するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        toolStrip1.Dock = DockStyle.Top; // 上部に配置
        toolStrip1.BackColor = Color.LightGray; // 背景色を設定
    }
}

このコードを実行すると、ToolStripが上部に配置され、背景色が薄い灰色に設定されます。

ToolStripイベントの種類

Clickイベント

Clickイベントは、ToolStripのアイテムがクリックされたときに発生します。

このイベントを利用することで、ユーザーの操作に応じた処理を実行できます。

以下は、Clickイベントを使用したサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        button1.Click += Button1_Click; // Clickイベントの登録
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
    }
    private void Button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("ボタン1がクリックされました!"); // メッセージボックスを表示
    }
}

このコードを実行すると、「ボタン1」をクリックした際にメッセージボックスが表示されます。

ItemClickedイベント

ItemClickedイベントは、ToolStrip内のアイテムがクリックされたときに発生します。

このイベントは、ToolStrip全体に対して設定され、どのアイテムがクリックされたかを判別できます。

以下は、ItemClickedイベントを使用したサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        toolStrip1.ItemClicked += ToolStrip1_ItemClicked; // ItemClickedイベントの登録
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        ToolStripButton button2 = new ToolStripButton("ボタン2"); // ボタンの作成
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
        toolStrip1.Items.Add(button2); // ToolStripにボタンを追加
    }
    private void ToolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        MessageBox.Show($"{e.ClickedItem.Text}がクリックされました!"); // クリックされたアイテムのテキストを表示
    }
}

このコードを実行すると、どのボタンがクリックされたかに応じてメッセージボックスが表示されます。

Paintイベント

Paintイベントは、ToolStripが再描画されるときに発生します。

このイベントを利用して、ToolStripのカスタム描画を行うことができます。

以下は、Paintイベントを使用したサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        toolStrip1.Paint += ToolStrip1_Paint; // Paintイベントの登録
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
    }
    private void ToolStrip1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawString("カスタム描画", this.Font, Brushes.Red, new PointF(10, 10)); // カスタムテキストを描画
    }
}

このコードを実行すると、ToolStripの上部に赤いテキスト「カスタム描画」が表示されます。

ToolStripイベントの実装方法

イベントハンドラの作成

イベントハンドラは、特定のイベントが発生したときに実行されるメソッドです。

ToolStripのイベントに対してハンドラを作成することで、ユーザーの操作に応じた処理を実行できます。

以下は、Clickイベント用のイベントハンドラを作成するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        button1.Click += Button1_Click; // Clickイベントの登録
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
    }
    private void Button1_Click(object sender, EventArgs e)
    {
        // ここにボタンがクリックされたときの処理を記述
        MessageBox.Show("ボタン1がクリックされました!"); // メッセージボックスを表示
    }
}

このコードでは、Button1_ClickメソッドがClickイベントのハンドラとして機能します。

イベントの登録方法

イベントを登録するには、対象のToolStripアイテムに対してイベントハンドラを指定します。

通常、コンストラクタ内で行います。

以下は、ItemClickedイベントを登録するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        toolStrip1.ItemClicked += ToolStrip1_ItemClicked; // ItemClickedイベントの登録
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        ToolStripButton button2 = new ToolStripButton("ボタン2"); // ボタンの作成
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
        toolStrip1.Items.Add(button2); // ToolStripにボタンを追加
    }
    private void ToolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        // ここにアイテムがクリックされたときの処理を記述
        MessageBox.Show($"{e.ClickedItem.Text}がクリックされました!"); // クリックされたアイテムのテキストを表示
    }
}

このコードでは、ToolStrip1_ItemClickedメソッドがItemClickedイベントのハンドラとして機能します。

イベントハンドラ内での処理

イベントハンドラ内では、ユーザーの操作に応じた処理を記述します。

例えば、メッセージボックスを表示したり、他のUI要素を更新したりすることができます。

以下は、MouseEnterとMouseLeaveイベントのハンドラ内での処理を示すサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        button1.MouseEnter += Button1_MouseEnter; // MouseEnterイベントの登録
        button1.MouseLeave += Button1_MouseLeave; // MouseLeaveイベントの登録
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
    }
    private void Button1_MouseEnter(object sender, EventArgs e)
    {
        // マウスがボタンに入ったときの処理
        ((ToolStripButton)sender).BackColor = Color.LightBlue; // 背景色を変更
    }
    private void Button1_MouseLeave(object sender, EventArgs e)
    {
        // マウスがボタンから出たときの処理
        ((ToolStripButton)sender).BackColor = Color.Transparent; // 背景色を元に戻す
    }
}

このコードでは、マウスがボタンに入ったときと出たときに背景色を変更する処理が記述されています。

イベントハンドラ内での処理を工夫することで、ユーザーに対してより良いインターフェースを提供できます。

ToolStripイベントの活用法

ツールバーの動的更新

ToolStripを使用すると、ユーザーの操作に応じてツールバーの内容を動的に更新することができます。

たとえば、特定の条件に基づいてボタンを追加したり、削除したりすることが可能です。

以下は、ボタンを動的に追加するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    private ToolStripButton addButton;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        addButton = new ToolStripButton("ボタン追加"); // ボタンの作成
        addButton.Click += AddButton_Click; // Clickイベントの登録
        toolStrip1.Items.Add(addButton); // ToolStripにボタンを追加
    }
    private void AddButton_Click(object sender, EventArgs e)
    {
        ToolStripButton newButton = new ToolStripButton($"ボタン{toolStrip1.Items.Count}"); // 新しいボタンの作成
        toolStrip1.Items.Add(newButton); // ToolStripに新しいボタンを追加
    }
}

このコードを実行すると、「ボタン追加」をクリックするたびに新しいボタンがToolStripに追加されます。

コンテキストメニューの実装

ToolStripを使用して、右クリック時に表示されるコンテキストメニューを実装することもできます。

以下は、ToolStripのコンテキストメニューを作成するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    private ContextMenuStrip contextMenuStrip;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        contextMenuStrip = new ContextMenuStrip(); // コンテキストメニューの作成
        contextMenuStrip.Items.Add("オプション1", null, Option1_Click); // メニューアイテムの追加
        contextMenuStrip.Items.Add("オプション2", null, Option2_Click); // メニューアイテムの追加
        toolStrip1.MouseDown += ToolStrip1_MouseDown; // MouseDownイベントの登録
    }
    private void ToolStrip1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right) // 右クリックの場合
        {
            contextMenuStrip.Show(Cursor.Position); // コンテキストメニューを表示
        }
    }
    private void Option1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("オプション1が選択されました!"); // メッセージボックスを表示
    }
    private void Option2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("オプション2が選択されました!"); // メッセージボックスを表示
    }
}

このコードを実行すると、ToolStripを右クリックした際にコンテキストメニューが表示され、選択したオプションに応じたメッセージボックスが表示されます。

ショートカットキーとの連携

ToolStripのアイテムにショートカットキーを設定することで、キーボードからの操作を簡単に行えるようになります。

以下は、ショートカットキーを設定するサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        ToolStripButton button1 = new ToolStripButton("ボタン1"); // ボタンの作成
        button1.ShortcutKeys = Keys.Control | Keys.B; // ショートカットキーの設定
        button1.Click += Button1_Click; // Clickイベントの登録
        toolStrip1.Items.Add(button1); // ToolStripにボタンを追加
    }
    private void Button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("ボタン1がクリックされました!"); // メッセージボックスを表示
    }
}

このコードを実行すると、Ctrl + Bを押すことで「ボタン1」がクリックされたのと同じ処理が実行され、メッセージボックスが表示されます。

ショートカットキーを設定することで、ユーザーの操作性を向上させることができます。

応用例

カスタムToolStripの作成

カスタムToolStripを作成することで、特定のニーズに応じた独自のツールバーを実装できます。

以下は、カスタムToolStripを作成し、独自の描画を行うサンプルコードです。

public class CustomToolStrip : ToolStrip
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e); // 基本の描画処理を呼び出す
        e.Graphics.FillRectangle(Brushes.LightGray, this.ClientRectangle); // 背景を塗りつぶす
    }
}
partial class MyForm : Form
{
    private CustomToolStrip customToolStrip;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        customToolStrip = new CustomToolStrip(); // カスタムToolStripのインスタンスを作成
        this.Controls.Add(customToolStrip); // フォームにカスタムToolStripを追加
        ToolStripButton button1 = new ToolStripButton("カスタムボタン"); // ボタンの作成
        customToolStrip.Items.Add(button1); // カスタムToolStripにボタンを追加
    }
}

このコードを実行すると、カスタムToolStripが作成され、背景が薄い灰色に塗りつぶされます。

状態に応じたToolStripの変更

ToolStripの内容をアプリケーションの状態に応じて変更することができます。

たとえば、ユーザーのログイン状態に応じて表示するボタンを切り替えることが可能です。

以下は、状態に応じたToolStripの変更を行うサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    private ToolStripButton loginButton;
    private ToolStripButton logoutButton;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStripのインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStripを追加
        loginButton = new ToolStripButton("ログイン"); // ログインボタンの作成
        loginButton.Click += LoginButton_Click; // Clickイベントの登録
        toolStrip1.Items.Add(loginButton); // ToolStripにログインボタンを追加
        logoutButton = new ToolStripButton("ログアウト"); // ログアウトボタンの作成
        logoutButton.Click += LogoutButton_Click; // Clickイベントの登録
        logoutButton.Visible = false; // 初期状態では非表示
        toolStrip1.Items.Add(logoutButton); // ToolStripにログアウトボタンを追加
    }
    private void LoginButton_Click(object sender, EventArgs e)
    {
        loginButton.Visible = false; // ログインボタンを非表示
        logoutButton.Visible = true; // ログアウトボタンを表示
    }
    private void LogoutButton_Click(object sender, EventArgs e)
    {
        logoutButton.Visible = false; // ログアウトボタンを非表示
        loginButton.Visible = true; // ログインボタンを表示
    }
}

このコードを実行すると、ログインボタンをクリックするとログアウトボタンに切り替わり、逆にログアウトボタンをクリックするとログインボタンに戻ります。

複数ToolStripの連携

複数のToolStripを連携させることで、異なる機能を持つツールバーを作成できます。

以下は、2つのToolStripを連携させるサンプルコードです。

partial class MyForm : Form
{
    private ToolStrip toolStrip1;
    private ToolStrip toolStrip2;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        toolStrip1 = new ToolStrip(); // ToolStrip1のインスタンスを作成
        this.Controls.Add(toolStrip1); // フォームにToolStrip1を追加
        ToolStripButton button1 = new ToolStripButton("ToolStrip1ボタン"); // ToolStrip1用のボタン
        button1.Click += Button1_Click; // Clickイベントの登録
        toolStrip1.Items.Add(button1); // ToolStrip1にボタンを追加
        toolStrip2 = new ToolStrip(); // ToolStrip2のインスタンスを作成
        this.Controls.Add(toolStrip2); // フォームにToolStrip2を追加
        ToolStripButton button2 = new ToolStripButton("ToolStrip2ボタン"); // ToolStrip2用のボタン
        button2.Click += Button2_Click; // Clickイベントの登録
        toolStrip2.Items.Add(button2); // ToolStrip2にボタンを追加
    }
    private void Button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("ToolStrip1のボタンがクリックされました!"); // メッセージボックスを表示
    }
    private void Button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("ToolStrip2のボタンがクリックされました!"); // メッセージボックスを表示
    }
}

このコードを実行すると、2つのToolStripが表示され、それぞれのボタンをクリックすることで異なるメッセージボックスが表示されます。

複数のToolStripを連携させることで、機能を分けて整理することができます。

よくある質問

ToolStripイベントが発生しないのはなぜ?

ToolStripイベントが発生しない場合、以下の点を確認してください。

  • イベントハンドラの登録: イベントハンドラが正しく登録されているか確認します。

例えば、button.Click += Button_Click;のように、ボタンのClickイベントにハンドラを登録する必要があります。

  • コントロールの有効化: ToolStripやそのアイテムが無効化されている場合、イベントは発生しません。

Enabledプロパティがtrueになっているか確認してください。

  • フォームの再描画: フォームが正しく描画されていない場合、イベントが発生しないことがあります。

Invalidate()メソッドを使用して再描画を試みてください。

ToolStripのデザインをカスタマイズする方法は?

ToolStripのデザインをカスタマイズする方法はいくつかあります。

以下の方法を試してみてください。

  • プロパティの設定: BackColorForeColorFontなどのプロパティを設定することで、ToolStripの見た目を変更できます。
  • カスタム描画: Paintイベントを利用して、独自の描画処理を実装することができます。

Graphicsオブジェクトを使用して、背景やテキストを自由に描画できます。

  • カスタムToolStripの作成: ToolStripクラスを継承してカスタムクラスを作成し、独自の描画や機能を追加することも可能です。

ToolStripとMenuStripの違いは何ですか?

ToolStripとMenuStripは、どちらもユーザーインターフェースの要素ですが、以下のような違いがあります。

  • 目的:
  • ToolStrip: ツールボタンやショートカットを提供するためのバーで、主にアクションを実行するためのボタンが配置されます。
  • MenuStrip: メニュー項目を表示するためのバーで、階層的なメニューを作成し、ユーザーが選択できるオプションを提供します。
  • 表示形式:
  • ToolStrip: 水平または垂直に配置でき、ボタンやドロップダウンリストなどのアイテムを含むことができます。
  • MenuStrip: 通常は水平に配置され、メニュー項目がドロップダウン形式で表示されます。

サブメニューを持つことができます。

  • イベントの取り扱い:
  • ToolStrip: 各アイテムに対して個別のイベント(Clickなど)を設定できます。
  • MenuStrip: メニュー項目の選択に対してイベントを設定し、サブメニューも含めて管理できます。

まとめ

この記事では、C#のToolStripイベントの使い方や活用法について詳しく解説しました。

ToolStripを利用することで、ユーザーインターフェースをよりインタラクティブにし、アプリケーションの操作性を向上させることが可能です。

これを機に、実際のプロジェクトにToolStripを取り入れ、さまざまなイベントやカスタマイズ機能を試してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

他のコンテンツも見る

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す