gpt4 book ai didi

c# - 如何控制 MDI 窗体中子窗体的显示顺序

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:18 25 4
gpt4 key购买 nike

当我使用 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);
}

子Form的数量超过3个,为了在调用LayoutMdi()方法后能够正确显示,我不得不设置Dock属性DockStyle.Top 的所有子窗体。

调用LayoutMdi(MdiLayout.TileHorizo​​ntal)后,点击第一个子Form的Title Bar,该子Form自动显示在MDI父级的底部。

我希望被点击的子表单保持其原始位置。
这个问题有什么想法吗?

最佳答案

查看链接的问题 - 建议设置 Dock 属性以调整 MDIChild Forms 位置 - 以及当前报告的行为,它可能更可取在不借助自动功能的情况下定义 MDIChild Forms 的布局。

这允许执行任何看起来合适的布局逻辑。

在示例中,MDIChildren.Height 是根据MDIParent.ClientSize.Height 和打开的MDIChildren 数计算的,然后乘以一个值:在示例代码中乘以 2,即基本度量值的两倍。

此乘数允许非常精确地定义MDICChildrenHorizo​​ntal Tile Height。当然,您可以实现一些其他逻辑,仅在至少打开 3 个 MDIChildren 时才应用乘数。

所有 MDIChildren 都重新调整大小以匹配 MDIParent.Width 和计算出的 Height,然后按名称排序并从顶部开始定位到底部。

设置不同的 Horizo​​ntalTileHeightMultiplier 值以查看 MDIChildrenMDIParent.ClientArea 中的位置(MdiClient ).
此乘数还可以用作应用程序中的自定义属性,可供其用户使用,从而允许对表单进行自定义平铺。

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

private float horizontalTileHeightMultiplier = 2;

private void menuItem1_Click(object sender, EventArgs e)
{
TileHorizontal()
}

private void TileHorizontal()
{
int openedForms = Application.OpenForms.Count - 1;
if (openedForms < 2) return;

int startLocation = 0;
int childrenHeight =
(int)((ClientSize.Height / openedForms) * horizontalTileHeightMultiplier);

List<Form> children = MdiChildren.OrderBy(f => f.Name).ToList();
foreach (Form child in children)
{
child.Size = new Size(ClientSize.Width - SystemInformation.VerticalScrollBarWidth - 4, childrenHeight);
child.Location = new Point(0, startLocation);
startLocation += childrenHeight;
}
}

关于c# - 如何控制 MDI 窗体中子窗体的显示顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com