【问题标题】:MDI Child forms overlapped with MDI Parent form controlsMDI 子窗体与 MDI 父窗体控件重叠
【发布时间】:2020-10-12 07:15:15
【问题描述】:

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

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

【问题讨论】:

  • 您将该面板添加到 MdiParent 窗体,而子窗体添加到 MdiClient 容器。您的面板将始终位于其他控件之上。您可以改用无边框、停靠的子表单。或者完全想出另一种布局。
  • 您需要对接该面板。停靠后,MDI 子表单将正确占用任何剩余空间。
  • @Idle_Mind 如果将 Panel 停靠在 MdiParent 内部(当然不能停靠在 MdiClient 内部),还需要 SendToBack() MenuStrip、ToolStrip(s) 和 StatusStrip,否则 Panel将重叠它们。无论如何,mdi 子窗体将进入面板(因为它们仍处于较低层次结构中)。
  • 这是使用 Show() 和 ShowDialog() 的区别。 ShowDialog() os 阻塞并等待子窗体在返回父窗体之前关闭。 Show 将让子进程保持打开状态并返回父进程(前提是您没有在退出时关闭子进程)。

标签: c# windows vb.net visual-studio winforms


【解决方案1】:

首先,在您的子表单属性中,在 FormBorderStyle 属性中,选择(无)。

其次,替换您的代码以显示您的子表单:

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

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

【讨论】:

    【解决方案2】:

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

    请参考以下代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多