【问题标题】:Cannot alter Form size/bounds at runtime (C#)无法在运行时更改表单大小/边界(C#)
【发布时间】:2011-04-27 21:12:17
【问题描述】:

我有一个用户控件拥有的表单(它又严重嵌套在其他表单/用户控件中)。为了在 UserControl 调整大小时调整窗体的大小,我在 UserControl 的 OnLayout 方法的覆盖内执行以下操作:

this.Form.Bounds = someValidRectangle;

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

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

我以前从未遇到过这样的问题。什么会阻止我实际设置表单的大小?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    事实证明,繁重的嵌套是关键。我看到这篇文章描述了调整嵌套控件大小的 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

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

    【讨论】:

    • 很有趣。我也从来没有遇到过,所以为这个链接点赞。
    【解决方案2】:

    您是否也重写了控件的 SetBoundsCore 方法?如果没有,请尝试这样做。

    编辑:阅读相应的 msdn 文档,其中包含有关覆盖它的说明。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setboundscore.aspx

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多