私はプログラムで作成するPanel
を持っています。さらに私はそれにいくつかのコンポーネントを追加しています。ラベルの高さをオートサイズする方法(幅は指定しない)
これらのコンポーネントの1つは、ユーザが生成したコンテンツを含むLabel
です。
ラベルの高さはわかりませんが、幅は固定されています。
幅を変更せずにすべてのテキストを表示するように高さを設定するにはどうすればよいですか?
私はプログラムで作成するPanel
を持っています。さらに私はそれにいくつかのコンポーネントを追加しています。ラベルの高さをオートサイズする方法(幅は指定しない)
これらのコンポーネントの1つは、ユーザが生成したコンテンツを含むLabel
です。
ラベルの高さはわかりませんが、幅は固定されています。
幅を変更せずにすべてのテキストを表示するように高さを設定するにはどうすればよいですか?
AutoSize
プロパティを使用して、True
に戻してください。
MaximumSize
プロパティをたとえば(60, 0)
に設定すると、水平方向に拡大することはできず、垂直方向にのみ拡大できます。
public SizeF MeasureString(
string text,
Font font,
int width
)
幅パラメータが返さSizeF構造 (幅)の幅成分 の最大値を指定します。 widthパラメーター が 文字列の実際の幅より小さい場合、返されるWidthコンポーネント は、 が指定された幅内に収まる最大文字数 を表す値に切り捨てられます。 文字列全体に対応するには、返されたHeightコンポーネント は、 文字の折り返し文字列を表示できる値に調整されます( )。
つまり、この関数は、幅に基づいて文字列の高さを計算できます。
ラベルを持っていて、垂直方向のフィットを管理している場合は、次の操作を行うことができます。
MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)
あなたはサイズを変更することができ、容器内のラベルを持っている場合、これは一例に便利です。その場合、ラベルが水平方向ではなく垂直方向でないように、Anchor
プロパティを設定できます。また、resizeイベントでは、上記の方法を使用して高さに合わせることができます。
新しいサイズ変更イベントとして解釈される垂直方向のフィッティングを避けるために、あなたはブール使用することができます。
bool _inVerticalFit = false;
そして、resizeイベントで:
if (_inVerticalFit) return;
_inVerticalFit = true;
MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)
_inVerticalFit = false;
+1。私の提案よりずっと簡単です。 – Brian
シンプルさの理由からBrianの答えも完全に良いですが、これは理解しやすく、維持しやすいものです。 – Malfist
液体の幅が必要な場合はどうすればよいですか? – Robin