を私は別のプロジェクトのためのラベルコントロールのためにこれを書きました。私はどこかのコードプロジェクトからコードを取得しました。それをテキストボックスに変更するには、ベースを変更するだけの簡単な操作が必要です。
Dim s As SizeF = TextRenderer.MeasureText(txt.Text, txt.Font, txt.ClientRectangle.Size, TextFormatFlags.WordBreak)
txt.Height = CInt(s.Height)
あなたは最小の高さのいくつかの種類が必要になりますし、おそらくいくつかのパディングを指定するが、これは作業を行います。他の人が投稿しているようなアイデアの
public class GrowLabel : Label
{
private bool _growing;
//public bool GrowFontSize { get; set; }
public GrowLabel()
{
AutoSize = false;
//GrowFontSize = false;
}
public override sealed bool AutoSize
{
get { return base.AutoSize; }
set { base.AutoSize = value; }
}
private void ResizeLabel()
{
if (_growing) return;
try
{
_growing = true;
var sz = new Size(Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(Text, Font, sz, TextFormatFlags.WordBreak);
Height = sz.Height;
}
finally
{
_growing = false;
}
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
ResizeLabel();
}
protected override void OnFontChanged(EventArgs e)
{
base.OnFontChanged(e);
ResizeLabel();
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
ResizeLabel();
}
}
偉大な答えと私は私のプロジェクトでこれを使用します。ありがとう! –
+1 TextRenderer.MeasureText –