在 SplitContainer 中关闭 mdi 子项

Posted

技术标签:

【中文标题】在 SplitContainer 中关闭 mdi 子项【英文标题】:Closing mdi child in SplitContainer 【发布时间】:2015-05-22 21:11:57 【问题描述】:

我正在开发一个 winforms 应用程序,并且我正在将一个 mdi 子窗体放在 splitcontainer.panel1 中。 当我想关闭当前的 mdi 孩子以打开另一个孩子时,我无法获得孩子表单。 我正在使用此代码打开新的孩子,但我想让当前的孩子关闭它:

            Accueil accueil = new Accueil();
            accueil.MdiParent = this;
            accueil.TopLevel = false;
            this.splitContainer1.Panel1.Controls.Add(accueil);
            accueil.WindowState = FormWindowState.Maximized;
            accueil.Size = this.splitContainer1.Panel1.ClientSize;
            accueil.MinimizeBox = false;
            accueil.MaximizeBox = false;
            accueil.ControlBox = false;
            accueil.Width = this.splitContainer1.Panel1.Width;
            accueil.Height = this.splitContainer1.Panel1.Height;
            accueil.Show();

【问题讨论】:

【参考方案1】:

将 MDI 子窗口放入拆分容器没有任何意义。通过将表单的 TopLevel 属性设置为 false,您可以将表单转换为普通控件。最好不要丢失参考。但你可能会领先:

    while (splitContainer1.Panel1.Controls.Count > 0)
        splitContainer1.Panel1.Controls[0].Dispose();
    var accueil = new Accueil();
    accueil.TopLevel = false;
    accueil.Dock = DockStyle.Fill;
    accueil.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    accueil.Visible = true;
    this.splitContainer1.Panel1.Controls.Add(accueil);

请考虑改用 UserControl,它是一种理智的方法,最不可能长期混淆。

【讨论】:

我应该从一开始就考虑一下,现在可以了。谢谢。

以上是关于在 SplitContainer 中关闭 mdi 子项的主要内容,如果未能解决你的问题,请参考以下文章

winform中关闭退出和打开新窗口的几种方式

c#中关于splitContainer控件的用法:如何做到不清除控件就能在panel2中打开一个窗体呢?

如何在不使用系统关闭按钮的情况下关闭MDI子项

C# WPF.MDI,点击关闭按键后,如何在Closing中取消该关闭操作?

如何在vs 2005 中将mdi父窗口分割成两部分,一边treeview,一边显示子窗口(c# winform)

VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?