PreferredSizeとMaximumSize
改行や折り返しを含む文字列。これを格納するのに丁度いいコントロールの高さを知りたい。そういうことVBやC#いじくってると多々あります。
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の変更は一時的にすべきですね。
おわり。