MDI子窗体与MDI父窗体控件重叠

3

我有一个包含面板的MDI父窗体。该面板包括图表和其他用户信息。当我从菜单打开一个窗体时,新打开的窗体会显示在MDI父面板下方。 请问如何使子窗体显示在所有MDI父窗体控件之上。 我使用以下代码来打开这个窗体。

SalesInvoice sale = new SalesInvoice();
sale.MdiParent = this;
sale.Show();

enter image description here


1
你正在将那个面板添加到MdiParent窗体中,而子窗体则被添加到MdiClient容器中。你的面板将始终位于其他控件的顶部。你可以使用一个无边框的、停靠的子窗体替代它。或者想出另一种完全不同的布局方式。 - Jimi
你需要将那个面板停靠。一旦停靠,MDI子窗体就会正确地占据任何剩余的空间。 - Idle_Mind
@Idle_Mind 如果您将面板停靠在MdiParent内(当然不能将其停靠在MdiClient内),您还需要SendToBack()菜单栏、工具栏和状态栏,否则面板将覆盖它们。MDI子窗体无论如何都会位于面板下方(因为它们仍处于较低的层次结构中)。 - Jimi
使用Show()和ShowDialog()的区别在于,ShowDialog()是阻塞式的,会等待子窗体关闭后才返回到父窗体。而Show()则会保持子窗体打开,并返回到父窗体(前提是您不在退出时关闭子窗体)。 - jdweng
2个回答

0

首先,在您的子窗体属性中,选择FormBorderStyle属性中的(无)选项。

其次,将显示子窗体的代码替换为以下内容:

Sale.StartPosition = FormStartPosition.Manual
Sale.Left = 200
Sale.Top = 115
Sale.MdiParent = Me
Sale.Show()

你可以将 (200) 和 (115) 更改为你想要的方向。


0

当您显示表单时,可以使表单最大化。

请参考以下代码。

private void button1_Click(object sender, EventArgs e)
        {
            SalesInvoice sale = new SalesInvoice();
            sale.MdiParent = this;
            sale.Show();
            sale.WindowState = FormWindowState.Maximized;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接