【问题标题】:How to prevent Mdi child form size from changing when opening如何防止打开时Mdi子窗体大小发生变化
【发布时间】:2016-05-23 20:43:55
【问题描述】:

我正在尝试调整 Mdi 父窗体的大小以适应 Mdi 子窗体的大小。因此,当打开子窗体时,父窗体会根据子窗体的大小调整大小,而子窗体的大小将保持与设计器中创建的大小相同。

这看起来很简单,我几乎通过以下方式实现了它:

frm_newWindow newWindow = new frm_newWindow();
this.ClientSize = newWindow.Size;
newWindow.MdiParent = this;
newWindow.Dock = DockStyle.Fill;
this.MinimumSize = this.Size;
newWindow.Show();

起初,我认为它工作得很好——父表单变大了,子表单填满了客户区——我打算继续前进。然而,我仔细看了看,发现尺寸不正确。父表单确实会重新调整大小,但出于某种原因,child 表单的大小也会发生变化。因此,child 窗体上的控件大小不正确,位置也不正确。它们相当接近,但不正确。例如,在设计器中,“自动定位”在列表框下方的文本框(在文本框和列表框之间显示一条蓝线,同时将其拖动到位)最终在运行时位于表单的下方。

我也试过了:

this.ClientSize = newWindow.ClientSize

因为子窗体没有边框,我想也许不存在的边框仍然在计算子窗体的大小。不过,这条线的行为是一样的。

目前在 Visual Studio 创建的 InitializeComponent() 行之外的子窗体上没有代码。表单的边框样式设置为“无”。除了大小和文本外,其他所有属性都保持默认。

如何防止 Mdi 子窗体在打开时改变大小?

【问题讨论】:

  • 您使用了错误的工具来完成这项工作。 MDI 是一种过时的范例,而且 MDI 还要求子窗体具有正常大小的边框才能正常工作。你可以让父窗体 IsMDIContainer = false,把你的子窗体改成 TopLevel = false,然后做同样的事情。
  • @LarsTech 感谢您和我一起看这个。更改 TopLevel 有什么作用?当我在一个表单上尝试此操作时,该表单似乎没有显示在任何地方
  • 您必须将其添加到您的父容器中。 this.Controls.Add(yourChild);。不要忘记让它可见:yourChild.Visible = true;
  • @LarsTech 我想我现在明白了(我正在将子表单添加到父表单,就好像它是一个控件一样)。我可以使用您提到的那些行看到表格,尽管定位最初是关闭的(但没有像问题中描述的那样大小不正确,所以这很好)。感谢您的帮助-我将使用此设置一段时间,看看是否可以让它完成我需要的工作。我(显然)以前从未走这条路

标签: c# winforms resize mdi


【解决方案1】:

在子表单中将AutoScaleMode 属性设置为None。 这将解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多