2011-06-27 27 views
4

私はいくつかのプロパティに応じてサイズを変更するユーザーコントロールを実装しようとしています。 winformsが理解しているように、レイアウトエンジンは、レイアウトを実行して余裕がある最大サイズを通知するときに、各子コントロールに好みのサイズを尋ねます。Control.GetPreferredSizeメソッドの目的は何ですか?

これは、MSDNでGetPreferredSizeの説明である:

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

ラベルはどうですか? DockStyle.TopをDockStyle.Topに設定すると、幅は変更されません。 – username

+0

一般的には、AutoSize = Falseと定義されているので、サイズを無視してサイズを無視します。 –

+0

したがって、Containerは、AutoSize = trueの場合にのみ子コントロールのサイズを尊重しますが、正しいですか? – username