Control.GetPreferredSize方法的目的是什么?

时间:2011-06-27 16:48:24

标签: c# winforms layout

我正在努力实现一个根据某些属性更改其大小的用户控件。据我所知,winforms布局引擎会在执行布局时询问每个子控件的首选大小,并告知它们可以承受的最大大小。

这是msdn中的GetPreferredSize的描述:

Control.GetPreferredSize(Size proposedSize)
     

检索可以装入控件的矩形区域的大小。

我对以下内容感到困惑:

  

您可以返回大于的尺寸   约束中表示的约束   proposedSize参数,但是   提议大小应该减少   约束减少。

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

有人可以解释一下这是如何运作的?

2 个答案:

答案 0 :(得分:2)

该行的含义是您可以自由地返回比proposedSize参数更大的首选大小,但proposedSize仍应影响您的首选大小。例如,GetPreferredSize(new Size(100, 0)的返回大小应小于GetPreferredSize(new Size(200, 0))的返回大小。

请注意,如果返回更大的尺寸,则不会发生任何不良情况;布局引擎会为您排序所有内容,可能会减少另一个控件的可用大小。最终,您的首选大小只是引擎的一个提示,因此它知道它正在安排的各种UI组件的相对空间需求。

答案 1 :(得分:1)

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

它允许被调用的控件返回他们想要的大小(如果可能)。但是,容器不必遵循此请求的大小。例如,当控件的Dock设置为Top时,无论GetPreferredSize方法返回的值如何,宽度都将定义为包含控件的宽度。此方法对于流式布局控件等容器特别有用,它将逐个定位每个子控件。