无法在主窗体的控件之上显示子窗体

Unable to display Child form on top of main form's controls

Windows 7 专业版 64 位,VS2015 或 VS2019
嗨,
我有一个带有许多不同控件的 C# Win Form。
我将主窗体定义为 MDI 父窗体,并构建了一个 MDI 子窗体,它有自己的控件,由主窗体中的菜单项激活。
子窗体构建得很好,但它始终显示在 主窗体的许多不同控件之下。
我尝试了很多补救措施,但没有一个解决了问题。 我已将子表单设置为 TopMost = true;顶级=真;每一个或全部,都无济于事。 已从 VS2015 移至 VS2019 社区 - 相同。 我一直在浪费时间来解决一些看似简单的事情。
谁能帮我解决这个问题?

//In Main Form with menustrip, ComPortSetup is a standard winform class with some controls  
private void portSetupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ComPortSetup comPortSetup = new ComPortSetup();
            comPortSetup.MdiParent = this;
            comPortSetup.TopMost = true;
            comPortSetup.TopLevel = true; //Can not change programmatically
            comPortSetup.Show();
        }

我不确定,但我相信在使用 MDI 窗体时,不希望 parent 在主窗体区域上有自己的控件,否则您将遇到这个确切的问题。

因此有几​​种解决方法。

首先你可以在你的 parent 表单上放置一个面板,然后你的 child 可以添加到面板中。

然而,这现在是“正确的”MDI 控制,但它可能允许您实现您想要的。

ChildForm child = new ChildForm();
parentPanel.controls.add(child);  //ParentPanel needs to already be on main form

或者另一种方法是将您的 Parent 控件放在 MenuStrip(如 MS Word)上,或者您可以使用 Floating Dockable child 形式(想想 Visual Studio)然后总是可见的。

如果你想做后者,那么我建议使用 DockPanelSuite 控件来帮助你

https://github.com/dockpanelsuite/dockpanelsuite

这就是 MDI 的工作原理,没有办法解决这个问题。
MDI 父窗体上的所有控件都将带走 MDI 子窗体的“客户端”space。因此它们将始终显示在任何 MDI 子窗体的顶部。

换句话说,MDI子窗体只能使用MDI父窗体上未被其他控件占用的space。

您可以做的 是在 MDI 父窗体上放置一个面板,例如将其停靠在左侧。然后将您的“主要”控件放在该面板上。 MDI 子窗体将使用 MDI 父窗体上剩余的任何 space。
您可以在该面板旁边放置一个 splitter control,这样您就可以将其放大或缩小,或者将其设为 slidable,以便当您的鼠标靠近时面板会出现,当鼠标靠近时面板会再次隐藏远离它。

您可以尝试另一种方法,不再将其设为 MDI 并自行设置“子”表单的父级。但这很可能会导致其他问题。

我会尝试第一种方法,主窗体上的面板停靠在左侧,旁边有一个拆分器控件。