表单未显示在 Show() 上,因为它正在使用(?)

本文关键字:因为 显示 Show 表单 | 更新日期: 2023-09-27 17:55:24

一旦我使用了dockContainer.Add(form)和后来的dockContainer.Remove(dockableFormInfo),我就无法尝试从此 Dock 容器中删除表单,当我使用它显示自己时form.Show(),它根本不会显示。

通过属性查看它表明表单实际上是visible = true的,但即使使用该表单的可停靠控件已从容器中删除,我的想法是它仍然使用表单资源,因此我无法使其出现在控件之外。

如何显示表单?

表单未显示在 Show() 上,因为它正在使用(?)

问题解决了,首先感谢Hans Passant的顶级提示。

从停靠容器中删除后,只需将顶级设置为 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);
        }
    }
}