1

を使用した後、このドックコンテナからフォームを削除しようとして問題が発生しました。を使用してフォームを表示させると、まったく表示されません。dockContainer.Add(form)dockContainer.Remove(dockableFormInfo)form.Show()

プロパティを見ると、フォームが実際visible = trueに存在することがわかりますが、フォームを使用するドッキング可能なコントロールがコンテナから削除されたとしても、フォームリソースを使用しているため、コントロールの外に表示させることができないと思います。 。

フォームを表示するにはどうすればよいですか?

4

1 に答える 1

0

問題が解決しました。まず、TopLevel のヒントを提供してくれた Hans Passant に感謝します。

ドッキング コンテナーから削除した後、TopLevel を trueに設定するだけです。

テストコードは次のとおりです。

using System;
using System.Drawing;
using System.Windows.Forms;
using Crom.Controls.Docking;

namespace DockingTester
{
    public partial class Form1 : Form
    {
        private Form dummyForm;
        private readonly Guid dummyFormGuid = Guid.NewGuid();


        public Form1()
        {
            InitializeComponent();
            CreateDummyForm();
            this.dummyForm.Show();
        }

        private void CreateDummyForm()
        {
            dummyForm = new Form();
            this.dummyForm.Text = "Dummy docking test form";
        }

        private static void DockUndockForm(DockContainer dockContainer, Form form, Guid guid)
        {
            DockableFormInfo formInfo = dockContainer.GetFormInfo(guid);

            //Add
            if (formInfo == null)
            {
                formInfo = dockContainer.Add(form, zAllowedDock.All, guid);
                dockContainer.DockForm(formInfo, DockStyle.Left, zDockMode.Inner);
            }
            //Remove
            else
            {
                Form dummy =  formInfo.DockableForm;
                dockContainer.Undock(formInfo, new Rectangle(Point.Empty, new Size(100, 300)));
                dockContainer.Remove(formInfo);

                dummy.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
                dummy.TopLevel = true;
            }
        }

        private void dockUndockButton_Click(object sender, EventArgs e)
        {
            if (this.dummyForm.IsDisposed)
                CreateDummyForm();
            DockUndockForm(this.dockContainer1, this.dummyForm, this.dummyFormGuid);
        }

    }
}
于 2013-01-25T12:57:21.507 に答える