不能在运行时改变表单大小/边界(c#)

本文关键字:边界 运行时 改变 表单 不能 | 更新日期: 2023-09-27 17:53:13

我有一个由UserControl拥有的表单(它反过来又在其他表单/UserControls中大量嵌套)。为了在UserControl调整大小时调整表单的大小,我在UserControl的OnLayout方法的重写中执行以下操作:

this.Form.Bounds = someValidRectangle;

现在,当我调整应用程序的窗口大小时,这一行执行Bounds的值不会改变。我也试过显式设置高度和宽度,但无济于事。

在我的表单上,AutoScale = false, AutoSize = false, AutoSizeMode = GrowOnly, MinimumSize &;MaximumSize = 0,0.

我以前从未遇到过这样的问题。什么可以阻止我的窗体的大小实际上被设置?

不能在运行时改变表单大小/边界(c#)

事实证明,沉重的嵌套是关键。我看到了一篇描述Windows限制调整嵌套控件大小的文章:http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-exceeds-a-certain-depth-x64.aspx

总结:由于所有的调整大小调用,内核堆栈爆炸,阻止来自操作系统的进一步调整大小消息。

您是否也覆盖了控件的SetBoundsCore方法?如果没有,试着这样做。

编辑:阅读相应的msdn文档,其中包含关于重写它的注释。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setboundscore.aspx

在我的例子中,WindowsState正在影响它。下面的代码为我工作:

        WindowState = FormWindowState.Normal;
        Size = bounds.Size;
        Bounds = bounds;