下の写真のように、水色のPanelの上で、コンテキストメニューを開き、その選択に応じて、新たにPictureBoxなどのコントロールを追加する。
 ポイントは、コンテキストメニューを開くために、右クリックした位置を取得する点である。この点については、dobon.netを参考にした。
https://dobon.net/vb/dotnet/control/cmclickpoint.html
なお、追加したコントロールを削除したい場合は、(その2:追加したコントロールを削除する)を参照してください。
// 1.コントロール(panel)上で左クリックしたときにコンテキストメニューを開き、コンテキストメニューを開いた時にあったマウスの先端に動的に新たにコントロールを作る。
// 参考資料
// https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.contextmenustrip?view=netframework-4.8
// https://dobon.net/vb/dotnet/control/cmclickpoint.html
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
namespace TestSourceControl
{
    class Form3 : Form
    {
        public static void Main()
        {
            Application.Run(new Form3());
        }
        private Panel panel;
        // panelを左クリックしたときのContextMenuStripコントロールの宣言
        private ContextMenuStrip contextMenuStripOnPanel;
        public Form3()
        {
            this.Size = new Size(800, 800);
            // panelのコンテキストメニューを宣言とコンテキストメニューを開いた時のイベントハンドラーの定義
            contextMenuStripOnPanel = new ContextMenuStrip();
            // panelの上で、右クリックをした時のコンテキストメニューを開くためのデリゲードへの登録
            contextMenuStripOnPanel.Opening += new CancelEventHandler(cms_Opening); // 必ずForm3()で宣言する
            panel = new Panel();
            panel.Location = new Point(100, 100);
            panel.Size = new Size(600, 600);
            panel.BorderStyle = BorderStyle.FixedSingle;
            panel.BackColor = Color.SkyBlue;
            panel.Parent = this;
            panel.ContextMenuStrip = contextMenuStripOnPanel;
            Label labelOnForm = new Label();
            labelOnForm.Text = " 水色のパネルの上で、右クリックをして、" + "\r\n" + "コンテキストメニューからコントロールを選択すると、" + "\r\n" + "パネル上の右クリックした際のマウスポインタの先の位置に、選択したコントロールを追加できます。" ;
            labelOnForm.AutoSize = true; ;
            labelOnForm.Location = new Point(0, 0);
            labelOnForm.Parent = this;
        }
        private Point cp;
        // panel上で右クリックをした時の処理
        void cms_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip menuOnPanel = (ContextMenuStrip)sender;
            
            // マウスカーソルの位置を画面座標で取得
            Point mp = MousePosition;
            cp = menuOnPanel.SourceControl.PointToClient(mp);
            Console.WriteLine(cp);
            // コンテキストメニューの表示
            contextMenuStripOnPanel.Items.Clear();
            contextMenuStripOnPanel.Items.Add("ピクチャーボックスを追加");
            contextMenuStripOnPanel.Items.Add("テキストボックスを追加");
            contextMenuStripOnPanel.Items.Add("ラベルを追加");
            contextMenuStripOnPanel.Items[0].Click += PanelMenuItems0_Click;
            contextMenuStripOnPanel.Items[1].Click += PanelMenuItems1_Click;
            contextMenuStripOnPanel.Items[2].Click += PanelMenuItems2_Click;
            // キャンセルをfalseに設定します。(イベントをキャンセルするかどうかの設定)
            // 空のエントリに基づいてtrueに最適化されます。
            e.Cancel = false;   //trueにするとコンテキスメニューが表示されない
        }
        //
        // PictureBoxをつくるイベントハンドラ
        private void PanelMenuItems0_Click(object sender, EventArgs e)
        {
            PictureBox pictureBox = new PictureBox();
            pictureBox.Location = cp;
            pictureBox.BackColor = Color.White;
            pictureBox.Size = new Size(50, 50);
            pictureBox.Image = Image.FromFile("testPicture.bmp");
            pictureBox.Parent = panel;
        }
        //
        // テキストボックスを作るイベントハンドラー 
        private void PanelMenuItems1_Click(object sender, EventArgs e)
        {
            TextBox textBox = new TextBox();
            textBox.Location = cp;
            textBox.BorderStyle = BorderStyle.FixedSingle;
            textBox.Text = "これはテキストボックスです。";
            textBox.Multiline=true;
            textBox.Size = new Size(100, 100);
            textBox.BackColor = Color.Yellow;
            textBox.Parent = panel;
        }
        //
        // ラベルを作るイベントハンドラー
        private void PanelMenuItems2_Click(object sender, EventArgs e)
        {
            Label label = new Label();
            label.Location = cp;
            label.BorderStyle = BorderStyle.FixedSingle;
            label.BackColor = Color.Pink;
            label.Text = "これはラベルです。";
            label.Parent = panel;
        }
    }
}
この画像ファイルは、debugフォルダまたはbinフォルダに置いてください。

