Как получить высоту элемента управления Label в Winforms

Моя этикетка оборачивает текст из-за длины текста. Свойство height возвращает правильное значение только в том случае, если есть одна строка. Как мне получить правильный рост?

Спасибо.

Решение. Я создавал метку динамически и проверял высоту. Позже панель, на которой находилась метка, была добавлена ​​в форму, изменив шрифт панели и, таким образом, также изменив шрифт и высоту метки.


person Community    schedule 22.02.2010    source источник
comment
Свойство Height возвращает высоту метки. Если метка оборачивается, но не изменяется по размеру, чтобы соответствовать тексту, высота метки не изменится, только высота текста.   -  person Instance Hunter    schedule 22.02.2010
comment
Размер метки изменяется (и создается динамически) из справки MS: высота элемента управления (в пикселях) при условии, что отображается одна строка текста.   -  person    schedule 22.02.2010


Ответы (3)


Самый простой способ получить желаемые размеры этикетки - использовать Label.GetPreferredSize(Size.Empty). Если вы хотите, чтобы размеры были ограничены размером, используйте тот же метод с непустым размером: Label.GetPreferredSize(constrainingSize)

person Zach Johnson    schedule 22.02.2010

Вариант 1. Вы можете использовать Graphics.MeasureString или TextRenderer.MeasureText. Второй вариант, наверное, проще для ваших целей.

Вариант 2. Если размер метки не соответствует всему тексту, убедитесь, что для свойства AutoSize установлено значение True.

Вариант 3. Используйте TextBox вместо Label. Установите для свойства ReadOnly значение true и измените цвет фона и границу, чтобы они соответствовали метке. Затем установите MultiLine = True. Это может дать вам тот же эффект, но без какой-либо ошибки, которую вы видите.

person Nick    schedule 22.02.2010
comment
как длина текста соотносится с высотой метки? - person ; 23.02.2010
comment
@bmutch: эти методы возвращают и ширину, и высоту, поэтому вы можете отказаться от ширины и использовать значение высоты. - person Zach Johnson; 23.02.2010
comment
Метод TextRenderer.MeasureText дает мне высоту одной строки текста в метке, мне нужна высота самой метки, чтобы знать, где разместить следующую метку под ней. - person ; 23.02.2010
comment
Свойство Label Height даст вам физическую высоту самой метки. Если вы пытаетесь подогнать метку ко всему тексту, убедитесь, что для свойства AutoSize установлено значение True. Если вы пытаетесь выяснить, какой размер должен быть установлен для метки, чтобы уместить весь текст, то упомянутые мной методы дадут вам это. - person Nick; 23.02.2010
comment
Это авторазмер. И это упаковка, я вижу, что у нее 2 строки, но свойство высоты по-прежнему такое же, как и у меток, которые не обертываются. - person ; 23.02.2010
comment
Мне не нужно знать правильную высоту этикетки, чтобы я мог разместить под ней еще одну. - person ; 23.02.2010
comment
Отредактировано еще одним возможным вариантом (TextBox) - person Nick; 23.02.2010
comment
Я пытался использовать текстовое поле, но оно остается той же ширины независимо от того, какой текст в нем, несмотря на autosize = true - person ; 23.02.2010

Решение: я создавал этикетку динамически и проверял высоту. Позже панель, на которой находилась метка, была добавлена ​​в форму, изменив шрифт панели и, таким образом, также изменив шрифт и высоту метки.

person Community    schedule 09.06.2010