Как автоматически изменить высоту метки, но не ширину - PullRequest
30 голосов
/ 12 января 2011

У меня есть Panel, который я создаю программно;Кроме того, я добавляю к нему несколько компонентов.

Один из этих компонентов - Label, который будет содержать пользовательский контент.

Я не знаю, какой высоты должна быть метка, но он имеет фиксированную ширину.

Как установить высоту, чтобы отображался весь текст без изменения ширины?

Ответы [ 3 ]

68 голосов
/ 12 января 2011

Просто используйте свойство AutoSize, установите его обратно в True.

Установите для свойства MaximumSize, скажем, (60, 0), чтобы оно не могло расти горизонтально, только вертикально.

5 голосов
/ 12 января 2011

Использование Graphics.MeasureString:

public SizeF MeasureString(
    string text,
    Font font,
    int width
)

Параметр width указывает максимальное значение ширины компонента возвращенной структуры SizeF (Ширина). Если параметр ширины меньше, чем фактическая ширина строка, возвращаемый компонент Width усекается до значения, представляющего максимальное количество символов, которые будет соответствовать в пределах указанной ширины. Чтобы вместить всю строку, возвращаемый компонент высоты корректируется до значения, которое позволяет отображать строка с переносом символов.

Другими словами, эта функция может вычислять высоту вашей строки на основе ее ширины.

0 голосов
/ 12 апреля 2015

Если у вас есть метка и вы хотите контролировать вертикальную подгонку, вы можете сделать следующее:

MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)

Это полезно, например, если у вас есть метка в контейнере, который может бытьизменен.В этом случае вы можете установить свойство Anchor так, чтобы размер метки изменялся по горизонтали, но не по вертикали, а в случае изменения размера вы можете подогнать высоту, используя метод, описанный выше.для интерпретации как новое событие изменения размера вы можете использовать логическое значение:

bool _inVerticalFit = false;

А в событии изменения размера:

if (_inVerticalFit) return;
_inVerticalFit = true;
MyLabel.MaximumSize = new Size(MyLabel.Width, 0)
MyLabel.Height = MyLabel.PreferredHeight
MyLabel.MaximumSize = new Size(0, 0)
_inVerticalFit = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...