【问题标题】:How to autoresize a parent form when a child form resizes in code?当子表单在代码中调整大小时,如何自动调整父表单的大小?
【发布时间】:2015-02-13 22:19:00
【问题描述】:

当我在代码中调整子表单的大小时,如何让父表单自动调整大小以包裹子表单?我将父表单的 autosize 属性设置为 true。我在大小更改后调用了 this.MdiParent.PerformLayout() 。我不想手动调整父表单的大小。

【问题讨论】:

  • 假设在 MDI 环境中如何工作?如果子窗体与边界重叠,则 MDI 父级仅提供滚动条。调整父表单的大小并不被认为是出色的 UI — 这通常是一种不和谐的体验。
  • 我正在尝试调整子表单的大小以显示更多内容并且它没有调整大小,我假设父表单正在限制它。为什么会刺耳?用户更愿意查看所有内容,而不是调整表单大小以查看隐藏的内容。
  • 但是 MDI 子表单是 MDI 区域内的浮动表单 - 这就是为什么您尝试做的事情没有意义。
  • 我想确认一下,这是一个 MDI 应用程序吗?还是这些子“表单”真的只是子控件?我认为我们需要更多地了解您的父表单。
  • 是的子表单在父表单内。 mdi 应用程序在启动时未最大化,但子窗体需要足够大以显示所有控件和网格。父窗体不知道它需要多大,因此子窗体调整其大小。不是因为它不能比父窗体更大。父窗体需要像孩子一样大。子窗体控制 mdi 应用程序的大小。就像在一个网页中,你有一个 div 并且内容控制着 div 的大小。如果 div 没有固定的宽度和高度,则会增长以显示所有内容。

标签: winforms


【解决方案1】:

在 MDI Parent 的 Control 集合中有一个隐藏控件,它的类型称为 MdiClient。您可以使用它来帮助确定任何停靠的面板或工具条占用了多少空间,然后相应地调整父窗体的客户区的大小:

MdiClient mc = this.Controls.OfType<MdiClient>().First();
int otherHeight = this.ClientSize.Height - mc.ClientSize.Height;
this.ClientSize = new Size(this.ClientSize.Width,
                           this.ActiveMdiChild.Height + otherHeight);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多