winforms 子MDI窗体显示在父MDI控件的下面

qlckcl4x  于 2023-05-29  发布在  其他
关注(0)|答案(2)|浏览(171)

我有两种形式; Form 1和Form 2。在Form 1中,有一个MenuStrip和一个按钮。单击该按钮时,Form 2将显示在Form 1按钮的下方。

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.MdiParent = this;
    frm.StartPosition = FormStartPosition.CenterScreen;
    frm.WindowState = FormWindowState.Maximized;
    frm.Show();
}
ulydmbyx

ulydmbyx1#

MDI容器中的子窗体始终位于直接放置在MDI容器上的其他控件的下面:

如果您将Form移动到菜单下,您也会看到相同的行为,不过由于MenuStrip是停靠的,您应该会看到滚动条,可以查看整个Form。

将按钮合并到MenuStrip上:

或将其停靠在某个边缘:* (这看起来很荒谬,但这只是为了演示;例如,您可以停靠面板并将其移动到其中,或者使用ToolStrip进行操作)*

vulvrdjw

vulvrdjw2#

当您将IsMdiContainer设置为true时。表单自动将System.Windows.Forms.MdiClient添加到ParentForm.Controls中。它通常在添加所有停靠控件之后添加。所以,它出现在按钮下面.您可以取消停靠此MDI容器。您可以自定义它。只有在代码中才有可能。就像:-

foreach (Control control in Controls)
{
    if (control is MdiClient mdic)
    {
        mdic.Dock = DockStyle.None;
        mdic.Bounds = new(50, 50, 200, 200);
        //You can use Size & Location instead.
    }
}

这样,就不能更改父窗体的背景。但是如果您手动添加此MDI容器,则可以这样做。然后,您不能将Form.MdiParent设置为ParentForm。你得手动写。就像:-

MdiClient mdic = new MdiClient();
ParentForm.Controls.Add(mdic);
//Customize your MdiClient in this line
mdiClient.Controls.Add(ChildForm);

相关问题