PreferredSizeとMaximumSize

改行や折り返しを含む文字列。これを格納するのに丁度いいコントロールの高さを知りたい。そういうことVBC#いじくってると多々あります。

PreferredSizeという「最適なサイズを示します」とMSDNでざっくりとした解説がされたプロパティがあるのですが、これでうまくいった試しがありません。いつも同じサイズ、同じフォントのリッチテキストコントロールを用意して文字列をコピー、最終文字の位置から相対座標を取得、そのY座標に1文字分の高さを足し…などのめんどくせーことをやってます。

でも今いじくってて気づいたことがあります。コントロールのMaximumSizeが0,0、つまり無制限の場合、PreferredSize.Heightは行数*文字Heightを返すようです。

あ、これひょっとして…とおそるおそるMaximumSize.Widthを対象コントロールのWidthにしてみると。PreferredSize.Heightは「最適なサイズ」を示しました。まだLabelでしか試してませんが、全文字きっちり表示されます。こんな感じ。

 

lbl1.MaximumSize = New Size(lbl1.Width, 500)

lbl1.Text = [すげーなげー改行だらけの文字列]

If lbl1.PreferredHeight > lbl1.Height Then

    lbl1.Height = lbl1.PreferredHeight

End If

 

AutoSizeが使えない場合(コンテナにFillでDockしてるとか)、便利です。

んでも画面リサイズとぶつかるかもだから、MaximumSizeの変更は一時的にすべきですね。

おわり。