LoginSignup
0
1

More than 3 years have passed since last update.

フォーム上にあるコントロールを、右クリックでコンテキストメニューを表示して、フォーム上から動的に削除する(その1)

Last updated at Posted at 2020-03-28

 フォーム上に配置したコントロール(ここではピクチャーボックス)を動的に削除する方法のソースコードを紹介する。

     動作イメージ.png      動作イメージ削除後.png
             削除前                     削除後
     (右クリックでコンテキストメニューを     (コントロールがフォームから消えたところ)
               表示させたところ)

 削除する際に、対象となるコントロールの上にマウスポインタを置き、右クリックでコンテキストメニューを表示させ、削除の項目を選択して削除する。

 本動作に必要な主なクラス・メソッドなどは次の通り。
  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を消す
        }
    }
}

pictureBox1に入れ込む画像例
play100_100.png

(その2:削除したいコントロールが複数ある場合)へ続く。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1