2011-06-27 71 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