我使用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)
父表单的底部。
我希望单击的子窗体保持其原始位置。
这个问题有什么主意吗?
答案 0 :(得分:1)
考虑到链接的问题-建议在何处设置Dock
属性以调整MDIChild
表单的位置-和当前报告的行为,可能最好定义{{ 1}}表单没有自动功能的帮助。
这允许执行似乎合适的任何布局逻辑。
在此示例中,相对于MDIChild
和打开的MDIChildren.Height
的数量计算MDIParent.ClientSize.Height
,然后乘以一个值:在示例代码中乘以2,基本度量。
此乘数允许非常精确地定义MDIChildren
中的Horizontal Tile Height
。当然,您可以实现一些其他逻辑,这些逻辑仅在打开了至少三个MDICHildren
时才应用乘法器。
调整所有MDIChildren
的大小以匹配MDIChildren
和计算出的MDIParent.Width
,然后按名称排序并从上到下放置。
设置不同的Height
值,以查看HorizontalTileHeightMultiplier
在MDIChildren
(MDIParent.ClientArea
)中的位置。
此乘数也可以用作应用程序中的自定义属性,供其用户使用,以允许自定义平铺表格。
布局代码是作为私有方法提供的,因此可以轻松地在不同的事件处理程序中使用它来执行/维护选定的布局(例如MdiClient
)。
如果需要,也可以轻松地使用此方法来替换MDIParent.Resize
。
MdiLayout.TileVertical