ポップアップから続けてポップアップを表示する

tt195361.hatenablog.comで表示したポップアップからさらにポップアップを表示すると、もともと表示していたポップアップが閉じてしまう。これを閉じないようにするには ToolStripDropDown.OwnerItem プロパティ を設定する。

次のプログラムでは、ポップアップ中のボタンのクリックイベントで、親のポップアップの ToolStripControlHost が子供 PopupPanel の OwnerItem プロパティに設定されるようにしている。

using System;
using System.Windows.Forms;

namespace CascadingPopup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ShowPopup(null);
        }

        private void ShowPopup(ToolStripItem ownerItem)
        {
            var button = new Button();
            button.Text = "ボタン";
            var controlHost = new ToolStripControlHost(button);
            button.Click += (sender, e) => ShowPopup(controlHost);
            var popupPanel = new ToolStripDropDown();
            popupPanel.OwnerItem = ownerItem;
            popupPanel.Items.Add(controlHost);
            popupPanel.Show(Cursor.Position);
        }
    }
}

f:id:tt195361:20150514165820p:plain