2011-06-27 57 views
4

我正在实现一个用户控件,根据某些属性更改其大小。据我了解,当执行布局时,winforms布局引擎会询问每个子控件的首选大小,并告知它们有关它们可以承受的最大大小。Control.GetPreferredSize方法的用途是什么?

这是GetPreferredSize MSDN中的描述:

Control.GetPreferredSize(Size proposedSize) 

检索到其中的控制可以装配的矩形区域的大小。

我很困惑通过以下事项:

您可以返回一个大小比 proposedSize参数指示的 制约较大,但随着 约束减小 proposedSize应该减少。

这是什么意思?如果我返回的尺寸比建议的大,会发生什么?

有人可以解释我是如何工作的?

回答

2

这意味着您可以自由返回比proposedSize参数更大的首选尺寸,但该proposedSize仍应该影响您的首选尺寸。例如,您返回的尺寸GetPreferredSize(new Size(100, 0)应该小于GetPreferredSize(new Size(200, 0))的返回尺寸。

请注意,如果您返回更大的尺寸,则不会发生任何错误;布局引擎会为您排序所有内容,可能是通过减小可用于其他控件的大小。最终,您的首选大小仅仅是引擎的一个提示,以便它知道它所安排的各种UI组件的相对空间需求是什么。

+0

谢谢,它使事情更清楚 – username

1

Control.GetPreferredSize被容器调用为布局周期的一部分。

它允许被调用的控件返回他们想要的大小,如果可能的话。但容器不必遵守这个请求的大小。例如,当控件的Dock设置为Top时,无论GetPreferredSize方法返回的值是多少,宽度都将被定义为包含控件的宽度。这种方法对于像流布局控件这样的容器特别有用,它将一个接一个地定位每个子控件。

+0

标签呢?当他们将Dock设置为DockStyle.Top时,它们不会改变它们的宽度 – username

+0

我认为它们通常被定义为AutoSize = False,因此它们会忽略您给它们的大小和大小以适应他们的需要。 –

+0

因此,只有在AutoSize = true的情况下,容器才会尊重子控件的大小,对吗? – username