winforms 无法在运行时更改窗体大小/边界(C#)

gblwokeq  于 2023-01-14  发布在  C#
关注(0)|答案(3)|浏览(191)

我有一个UserControl拥有的窗体(它反过来又嵌套在其他窗体/UserControl中)。为了在UserControl调整大小时调整窗体的大小,我在UserControl的OnLayout方法的重写中执行以下命令:
this.Form.Bounds = someValidRectangle;
现在,当我调整应用程序窗口的大小时,这行代码执行时,Bounds的值不会改变,我也尝试过显式设置Height和Width,但没有效果。
在我的窗体上,自动缩放设置为假,自动调整大小设置为假,自动调整大小模式设置为仅增长,最小大小和最大大小设置为0,0。
我以前从未遇到过这样的问题。什么会阻止窗体大小的实际设置?

xzabzqsa

xzabzqsa1#

原来沉重的嵌套才是关键。我偶然发现了这篇文章,它描述了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
总结:由于所有的resize调用,内核堆栈崩溃,阻止了来自操作系统的进一步的resize消息。

iyfamqjs

iyfamqjs2#

是否也重写了控件的SetBoundsCore方法?如果没有,请尝试重写。
编辑:同时阅读相应的msdn文档,其中包含有关覆盖它的说明。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setboundscore.aspx

xghobddn

xghobddn3#

在我的例子中,WindowsState影响了它。下面的代码对我很有效:

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

相关问题