C#

C# 右クリックメニューを表示する(ContextMenuStrip)

更新日:

現在のWindowsでは、もう定番ともいえる「右クリックメニュー」ですが、C#でもこの機能を扱うことができます。
題名に「右クリックメニュー」と書いていますが、正式名称は「コンテキストメニュー」です。
.NET Framework(C#)でもコントロール名はContextMenuStrip(System.Windows.Forms名前空間)です。

 

「作りたいのは”メニュー”じゃない」

Windowsアプリケーションには、よく「メニュー」を搭載したアプリケーションがあります。
なぜ、ここでこのようなことを書いているかというと、フォームデザイナにコンテキストメニューを置いたときに、メニューととても良く似た表示になるからです。

まず、Visual StudioでWindowsフォームアプリケーションを用意します。

ここに、[ツールボックス]の「メニューとツールバー」からフォームにContextMenuStripをD&D(ドラッグアンドドロップ)でフォームに置きます。

 

置き終わると、デザイナは下記のような表示になります。

「あれ?間違えた?」「置いたのはメニューじゃないのに・・・」と思われるかもしれません、ご安心下さい。これで、ちゃんと「コンテキストメニュー」をフォームに配置できています。

 

メニューをフォームに配置したときのデザイナ画面は、このようになっています(ちょっと無愛想ですね)。

 

さらに、メニューを載せたフォームにコンテキストメニューを置くと下図のようになります。

(見づらいかもしれませんが、通常のメニューと2段になっています)

 

使ってみる

サンプルコードは、下記のようになります。

/// <summary>
/// コンストラクタ
/// </summary>
public frmMain()
{
    InitializeComponent();

    // コンテキストメニューを生成します
    this.contextMenuStrip1.Items.Add("メニュー1", null, this.ContextMenu_Click);
    this.contextMenuStrip1.Items.Add("メニュー2", null, this.ContextMenu_Click);
    this.contextMenuStrip1.Items.Add("メニュー3", null, this.ContextMenu_Click);

    // このフォームのコンテキストメニューとして登録しておきます
    // (こうすることで右クリックしたときに
    //  コンテキストメニューが表示されるようになります)
    this.ContextMenuStrip = this.contextMenuStrip1;
}

/// <summary>
/// フォームがロードされたときの処理
/// </summary>
/// <param name="sender">送信元オブジェクト</param>
/// <param name="e">イベントオブジェクト</param>
private void frmMain_Load(object sender, EventArgs e)
{
    //
}

/// <summary>
/// [Exit]ボタンが押されたときの処理
/// </summary>
/// <param name="sender">送信元オブジェクト</param>
/// <param name="e">イベントオブジェクト</param>
private void btnExit_Click(object sender, EventArgs e)
{
    //
    this.Close();
}

/// <summary>
/// コンテキストメニューが押されたときの処理
/// </summary>
/// <param name="sender">送信元オブジェクト</param>
/// <param name="e">イベントオブジェクト</param>
private void ContextMenu_Click(object sender, EventArgs e)
{
    System.Windows.Forms.ToolStripMenuItem item = (System.Windows.Forms.ToolStripMenuItem)sender;
    string message = item.Text + " が押されました";
    MessageBox.Show(this, message, "メニュー", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

 

コンテキストメニューを使えるようにするには大事なことが3つあります。

  1. コンテキストメニューの項目を作る
  2. コンテキストメニュー項目をクリックしたときの処理を実装する
  3. コンテキストメニューをフォームに登録する

 

「1. コンテキストメニューの項目を作る」と「2. コンテキストメニュー項目をクリックしたときの処理を実装する」は、コンテキストメニューを作るので、そこに入れる項目は作ると思います。
意外に忘れてしまうのが、「3. コンテキストメニューをフォームに登録する」です。
コードであれば1行、デザイナであればプロパティでできますので、忘れないようにしましょう。

-C#

Copyright© プログラミングテクニック集キヤミー , 2019 All Rights Reserved.