Я бы предложил использовать Graphics.MeasureString
.
Сначала вы создаете объект Graphics
, затем вызываете MeasureString
для него, передавая строку и шрифт текстового поля.
Пример
string text = "TestingTesting\nTestingTesting\nTestingTesting\nTestingTesting\n";
// Create the graphics object.
using (Graphics g = textBox.CreateGraphics()) {
// Set the control's size to the string's size.
textBox.Size = g.MeasureString(text, textBox.Font).ToSize();
textBox.Text = text;
}
Вы также можете ограничить его вертикальной осью, установив только свойство textBox.Size.Height
и используя перегрузку MeasureString
, которая также принимает int width
.
Редактировать
Как указал SLaks, другой вариант использует TextRenderer.MeasureString
. Таким образом, нет необходимости создавать Graphics
объект.
textBox.Size = TextRenderer.MeasureString(text, textBox.Font).ToSize();
Здесь вы можете ограничиться вертикальным изменением размеров, используя технику Ганса, передав дополнительный параметр Size
в MeasureString
с int.MaxValue
высотой.