フォーム上に配置したコントロール(ここではピクチャーボックス)を動的に削除する方法のソースコードを紹介する。
削除前 削除後
(右クリックでコンテキストメニューを (コントロールがフォームから消えたところ)
表示させたところ)
削除する際に、対象となるコントロールの上にマウスポインタを置き、右クリックでコンテキストメニューを表示させ、削除の項目を選択して削除する。
本動作に必要な主なクラス・メソッドなどは次の通り。
ContextMenuStrip クラス
ToolStripMenuItem クラス
ToolStripMenuItem.Click デリゲート
EventHandler() イベントハンドラ
Control.ContextMenuStrip プロパティ
Control.Remove() メソッド
C#
// 参考資料 http://kaitei.net/csforms/menu-strips/#item-67
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TestContextMenu
{
class Form1 : Form
{
PictureBox pictureBox1;
static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
ContextMenuStrip contextMenuStripOnPictureBox1;
contextMenuStripOnPictureBox1 = new ContextMenuStrip(); // pictureBox1上で表示するコンテキストメニュー
// pictureBox1の定義
pictureBox1 = new PictureBox();
pictureBox1.Location = new Point(100, 100);
pictureBox1.Size = new Size(100, 100);
pictureBox1.BorderStyle = BorderStyle.FixedSingle;
pictureBox1.Image = Image.FromFile("play100_100.png");
pictureBox1.Parent = this; // フォームにpictureBox1を追加する
// pictureBox1の上で表示するコンテキストメニュー
ToolStripMenuItem tsmiDelete = new ToolStripMenuItem("削除(&D)"); // コンテキストメニューで表示される項目
tsmiDelete.Click += new EventHandler(tsmiDelete_Click); // コンテキストメニューのなかで「削除」を選択した時のデリゲート
contextMenuStripOnPictureBox1.Items.Add(tsmiDelete); // コンテキストメニューにtsmiDeleteを追加する
pictureBox1.ContextMenuStrip = contextMenuStripOnPictureBox1; // pictureBox1の上で左クリックしたときに、contextMenuStripOnPictureBox1に登録されたコンテキストメニューが表示されるようにする
}
// pictureBox1の上でコンテキストメニューを表示させたときのイベントハンドラ
// 「削除」を選択した時実行される
void tsmiDelete_Click(object sender, EventArgs e)
{
this.Controls.Remove(pictureBox1); // フォームのコントロールからpictureBox1を消す
}
}
}