現在の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行、デザイナであればプロパティでできますので、忘れないようにしましょう。