微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在主窗体的控件顶部显示子窗体

如何解决无法在主窗体的控件顶部显示子窗体

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 窗体时,不要期望父窗体在主窗体区域有自己的控件,否则你会遇到这个确切的问题。

所以有几种方法可以解决这个问题。

首先您可以在父表单上放置一个面板,然后您的孩子可以添加到面板中。

不过,这现在是“正确的”MDI 控制,但它可能会让您实现您想要的。

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

或者另一种方法是将您的父控件放在 MenuStrip(如 MS Word)上,或者您可以使用一个始终可见的浮动可停靠子窗体(想想 Visual Studio)。

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

https://github.com/dockpanelsuite/dockpanelsuite

,

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。