フォーム上にあるコントロールを、右クリックでコンテキストメニューを表示して、フォーム上から動的に削除する（その２：削除したいコントロールが複数ある場合）

前回紹介した「[フォーム上にあるコントロールを、右クリックでコンテキストメニューを表示して、フォーム上から動的に削除する（その１）](https://qiita.com/guijiu/items/0c437ce198363df5f2b4)」に引き続き、若干の変更を加え、今回は複数のコントロール（今回は、PictureBoxが２つ、Panelが１つ）がある場合についてのソースコードを紹介する。

　　　![動作イメージPic2削除前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/e3680208-bbec-09b4-8116-496a374ead09.png)　　　![動作イメージPic2削除後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/0e0d1dc4-6eeb-5e47-639b-ea7d377938b9.png)
　　　　　　　　　　　　　　　　　　　　　　pictureBox2を削除する様子

　　　![panel1削除エラーメッセージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/a5581815-3297-9b46-044a-99cfe56ad0ab.png)
　　　　panel1を削除しようとして、削除できない様子

　本動作に必要な主なクラス・メソッドなどは次の通り。
　　ContextMenuStrip.SourceControlプロパティ

　また、ContextMenuStripのインスタンスcontextMenuStripOnControlを異なったメソッド間で使用するために、その変数宣言をクラス直下で行うよう変更した。

　以下にソースコードを示す。

```C#
using System;
using System.Drawing;
using System.Windows.Forms;

namespace TestContextMenu
{
    class Form1 : Form
    {
        static void Main()
        {
            Application.Run(new Form1());
        }
        
        ContextMenuStrip contextMenuStripOnControl;     // （変更)前回　Form()コンストラクタにあったものをクラス直下の変数とした。

        public Form1()
        {
            contextMenuStripOnControl = new ContextMenuStrip();    // コントロール上で表示するコンテキストメニュー

            // pictureBox1の定義
            PictureBox pictureBox1;
            pictureBox1 = new PictureBox();
            pictureBox1.Location = new Point(50, 50);
            pictureBox1.Size = new Size(100, 100);
            pictureBox1.Image = Image.FromFile("play100_100.png");
            pictureBox1.BorderStyle = BorderStyle.FixedSingle;
            pictureBox1.Parent = this;          // フォームにpictureBox1を追加する

            // pictureBox2の定義　　（追加変更）
            PictureBox pictureBox2;
            pictureBox2 = new PictureBox();
            pictureBox2.Location = new Point(160, 50);
            pictureBox2.Size = new Size(100, 100);
            pictureBox2.Image = Image.FromFile("pause.png");
            pictureBox2.BorderStyle = BorderStyle.FixedSingle;
            pictureBox2.Parent = this;          // フォームにpictureBox2を追加する

            // panel1の定義　　（追加変更）
            Panel panel1;
            panel1 = new Panel();
            panel1.Location = new Point(50, pictureBox1.Location.X+pictureBox1.Height + 10);
            panel1.Size = new Size(210, 50);
            panel1.BackColor = Color.Blue;
            panel1.Parent = this;               // フォームにpanel1を追加する

            // pictureBox1の上で表示するコンテキストメニュー
            ToolStripMenuItem tsmiDelete = new ToolStripMenuItem("削除(&D)");   // コンテキストメニューで表示される項目 D
            tsmiDelete.Click += new EventHandler(tsmiDelete_Click);                 // コンテキストメニューの中で「削除」を選択した時のデリゲート
            contextMenuStripOnControl.Items.Add(tsmiDelete);                        // コンテキストメニューにtsmiDeleteを追加する

            // 削除したいコントロールのContextMenuStripプロパティーにContextMenuStripのインスタンスを指定する。コントロール(pictureBox1,2とpanel1)の上で左クリックしたときに、ContextMenuStripのインスタンスのインスタンスであるcontextMenuStripOnControlに登録されたコンテキストメニューが表示されるようになる。
            pictureBox1.ContextMenuStrip = contextMenuStripOnControl;      
            pictureBox2.ContextMenuStrip = contextMenuStripOnControl;    // 　　（追加変更)
            panel1.ContextMenuStrip = contextMenuStripOnControl;         // 　　（追加変更)
        }

        // コントロール(pictureBox1,2とpanel1)の上でコンテキストメニューの「削除」を選択した時のイベントハンドラ
        void tsmiDelete_Click(object sender, EventArgs e)
        {
            //Control c = contextMenuStripOnControl.SourceControl as Control;      //下でも、或いはこのような記述でも可（但し全てもコントロールオブジェクトが消える 　　（変更)
            PictureBox c = contextMenuStripOnControl.SourceControl as PictureBox;// PictureBoxのオブジェクトのみをフォームから消す時 　　（変更)

            if (c != null)      // (追加変更）
            {
                this.Controls.Remove(c);  // フォームに登録されたコントロール(PictureBox)のオブジェクトを消す
            }
            else MessageBox.Show("選択したのはPictureBoxではありません！");     // (追加変更）
        }

    }
}


```

pictureBox1に入れ込む画像例
![play100_100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/0a63d553-7566-b33b-25d4-740a4f6f3c4b.png)
![pause.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/f6541439-fde6-05d9-432c-e66f7f6708a1.png)