如何控制MDI表单中子表单的显示顺序

时间:2018-11-08 23:44:07

标签: c# winforms display mdi

我使用MDI表单时遇到问题。我的源代码就是这样:

private void menuItem1_Click(object sender, EventArgs e)
    {
        Form[] charr = this.MdiChildren;
        int i = 0;            
        foreach (Form chform in charr)
        {
            chform.Dock = DockStyle.Top;                
        }
        this.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal);
    }

子窗体的数量大于3。为了在调用LayoutMdi()方法之后正确显示它们,我必须将所有子窗体的Dock属性设置为{{1} }。

调用DockStyle.Top后,单击第一个子表单的标题栏,此子表单会自动显示在LayoutMdi(MdiLayout.TileHorizontal)父表单的底部。

我希望单击的子窗体保持其原始位置。
这个问题有什么主意吗?

1 个答案:

答案 0 :(得分:1)

考虑到链接的问题-建议在何处设置Dock属性以调整MDIChild表单的位置-和当前报告的行为,可能最好定义{{ 1}}表单没有自动功能的帮助。

这允许执行似乎合适的任何布局逻辑。

在此示例中,相对于MDIChild和打开的MDIChildren.Height的数量计算MDIParent.ClientSize.Height,然后乘以一个值:在示例代码中乘以2,基本度量。

此乘数允许非常精确地定义MDIChildren中的Horizontal Tile Height。当然,您可以实现一些其他逻辑,这些逻辑仅在打开了至少三个MDICHildren时才应用乘法器。

调整所有MDIChildren的大小以匹配MDIChildren和计算出的MDIParent.Width,然后按名称排序并从上到下放置。

设置不同的Height值,以查看HorizontalTileHeightMultiplierMDIChildrenMDIParent.ClientArea)中的位置。
此乘数也可以用作应用程序中的自定义属性,供其用户使用,以允许自定义平铺表格。

布局代码是作为私有方法提供的,因此可以轻松地在不同的事件处理程序中使用它来执行/维护选定的布局(例如MdiClient)。
如果需要,也可以轻松地使用此方法来替换MDIParent.Resize

MdiLayout.TileVertical