Visual studio label перенос строки
Я показываю текст в JLabel. Обычно я генерирую этот текст динамически, а затем применяю некоторые HTML-теги (например, BR и B ) для форматирования текста. Наконец, я назначаю этот форматированный текст своему JLabel.
Теперь я хочу, чтобы мой Jlabel автоматически переносил текст на следующую строку, когда он достигает конца экрана, как функция «Перенос слов» в Блокноте.
Как я могу это сделать?
Должно сработать, если вы поместите текст в .
ОБНОВЛЕНИЕ: Тогда вам, вероятно, также следует установить максимальный размер.
Просто подумал, что мне стоит опубликовать это для всех, кто ищет в Интернете, так как это была крошечная ошибка, которая стоила мне 30 минут, но убедитесь, что вы на самом деле обернули текст в HTML. Возможно, вы думали, что это так, но не сделали этого. Проверьте это, я забыл, и когда я обернул их в HTML, он исправил это для меня.
JLabel label = new JLabel("Lorem ipsum long paragraph"); неправильно.
JLabel label = new JLabel("Lorem ipsum long paragraph"); правильно!
Смешайте обычный текст, и HTML отключит автоматический перенос слов в HTML:
Таким образом, вы не можете смешивать разные типы (HTML и простой текст) текста в одном JLabel.
Мне нравится упомянутый выше подход JTextArea, потому что он прекрасно меняет размер на ЮГ на панели BorderLayout (до тех пор, пока компонент CENTER может компенсировать провисание, если количество строк в JTextArea изменится).
Однако в Nimbus L&F есть уловка в настройке цвета фона JTextArea. Кажется, что Nimbus использует волшебные цвета (расширенный класс java.awt.Color), которые становятся прозрачными в JTextArea. Поэтому, если вы копируете цвет фона из JPanel в область JText, вам необходимо преобразовать цвет в ARGB и обратно в цвет. Следующий код работает для меня во всех L & F в моей JRE (Nimbus, CDE Motif, Metal, Mac OS X):
Я сделал шрифт немного меньше. Конечно, вы можете сохранить размер шрифта JLabel, если хотите.
Я обнаружил, что это самое простое решение, которое также корректно работает с изменением размера. Помимо обтекания текста тегами , вы также должны поместить этикетку в контейнер, который соблюдает предпочтительную высоту и устанавливает максимальную ширину. Например, вы можете поместить метку на СЕВЕР от BorderLayout .
Вот простая, но полная рабочая программа, чтобы проиллюстрировать это. Вы можете изменить размер рамки по своему усмотрению; метка будет занимать всю ширину, а высота будет соответствующим образом изменена, чтобы обернуть текст. Обратите внимание, что все, что я делаю, это использую теги и помещаю метку на СЕВЕРе BorderLayout .
Один из способов - использовать JTextArea вместо JLabel с setWrapStyleWord и setLineWrap , установленными в значение true и с настройками, чтобы он выглядел и вел себя как JLabel (удалите границу, сделайте ее непрозрачной, сделайте недоступной для редактирования и не фокусируемой).
В противном случае, если вам абсолютно необходимо использовать JLabel , вам придется использовать FontMetrics для измерения текста, проверки наличия пробелов и затем самостоятельного добавления жестких разрывов HTML в соответствующие позиции.
Ширина может быть установлена для body с помощью стилей HTML (CSS). Это, в свою очередь, определит количество строк для рендеринга и, следовательно, предпочтительную высоту метки.
Установка ширины в CSS позволяет избежать необходимости вычислять, где должны происходить разрывы строк в (или лучший размер) метки.
How can one get word wrap functionality for a Label for text which goes out of bounds?
19 Answers 19
Actually, the accepted answer is unnecessarily complicated.
If you set the label to AutoSize, it will automatically grow with whatever text you put in it. (This includes vertical growth.)
If you want to make it word wrap at a particular width, you can set the MaximumSize property.
Tested and works.
If you have the label snap into it's container, you can switch off AutoSize, leave the max size property as it is, and it will word-wrap exactly as we want. KISS at work!
Sam: you should be able to set the Dock property of both the label and panel to Top , instead of my solution.
I have latched on to OnResize in the parent and call myLabel.MaximumSize = new Size(Bounds.Width, 0);
The quick answer: switch off AutoSize.
The big problem here is that the label will not change its height automatically (only width). To get this right you will need to subclass the label and include vertical resize logic.
Basically what you need to do in OnPaint is:
- Measure the height of the text (Graphics.MeasureString).
- If the label height is not equal to the height of the text set the height and return.
- Draw the text.
You will also need to set the ResizeRedraw style flag in the constructor.
Select the label you're dynamically adding text to. Look at the properties for the label and turn off AutoSize. You will now be able to drag/set the area for the label and it will automatically auto-wrap to stay within those parameters. No need for any additional coding.
This is precisely what I was looking for as it pertains to formatting my form with explanatory text that is in a paragraph form.
@madeFromCode You'd need to set the height programmatically if you want the label to expand vertically else your text will be clipped.
In my case (label on a panel) I set label.AutoSize = false and label.Dock = Fill . And the label text is wrapped automatically.
This makes the label fill the entire form and make it obscure all other controls in the form. That is, it does not seem to work. Are there other requirements such that it will not fill the entire form?
the label is on a panel, not on the form directly. Therefore the text does not exceed the bounds of the panel
That seems like some extra layout that should be unnecessary. Surely the label should have its own box rather than needing to be put into another box.
There is no autowrap property but this can be done programmatically to size it dynamically. Here is one solution:
Select the properties of the label
MaximumSize = (Width, Height) where Width = max size you want the label to be and Height = how many pixels you want it to wrap
In order to break on characters rather than words (useful when you have long strings without spaces such as file paths), use (TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl) instead. See the last post in the same MSDN thread.
Also, don't forget to include label's top and bottom padding in the calculation ( Height = sz.Height + Padding.Vertical; )
I had to find a quick solution, so I just used a TextBox with those properties:
This is an imaginative solution that also works well on Compact Framework (where Label does not have AutoSize and MaximumSize properties).
Have a better one based on @hypo 's answer
int width = this.Parent == null ? this.Width : this.Parent.Width; this allows you to use auto-grow label when docked to a parent, e.g. a panel.
this.Height = sz.Height + Padding.Bottom + Padding.Top; here we take care of padding for top and bottom.
Put the label inside a panel
Handle the ClientSizeChanged event for the panel, making the label fill the space:
Set Auto-Size for the label to true
Set Dock for the label to Fill
All but step 2 would typically be done in the designer window.
They are done in the designer (but could be done in code if you need it to) and there's no reason for the order.
Not sure it will fit all use-cases but I often use a simple trick to get the wrapping behaviour: put your Label with AutoSize=false inside a 1x1 TableLayoutPanel which will take care of the Label 's size.
Set the AutoEllipsis Property to 'TRUE' and AutoSize Property to 'FALSE'.
If your panel is limiting the width of your label, you can set your label’s Anchor property to Left, Right and set AutoSize to true. This is conceptually similar to listening for the Panel’s SizeChanged event and updating the label’s MaximumSize to a new Size(((Control)sender).Size.Width, 0) as suggested by a previous answer. Every side listed in the Anchor property is, well, anchored to the containing Control’s respective inner side. So listing two opposite sides in Anchor effectively sets the control’s dimension. Anchoring to Left and Right sets the Control’s Width property and Anchoring to Top and Bottom would set its Height property.
Doesn't work. The Label increases the width of my panel just that it doesn't have to wrap. Unfortunately, the window is not as wide.
If you really want to set the label width independent of the content, I find that the easiest way is this:
- Set autosize true
- Set maximum width to how you want it
- Set minimum width identically
Now the label is of constant width, but it adapts its height automatically.
Then for dynamic text, decrease the font size. If necessary, use this snippet in the sub where the label text is set:
Представление Label используется для отображения текста как одной, так и многострочного. Метки могут иметь оформление текста, цветной текст и использовать настраиваемые шрифты (семейства, размеры и параметры).
Оформление текста
Подчеркивание и зачеркивание текстовых украшений можно применить к Label экземплярам, задав Label.TextDecorations свойству один или несколько TextDecorations элементов перечисления:
- None
- Underline
- Strikethrough
В следующем примере XAML демонстрируется установка Label.TextDecorations свойства:
На следующих снимках экрана показаны TextDecorations члены перечисления, примененные к Label экземплярам:
Украшения текста также можно применять к Span экземплярам. Дополнительные сведения о классе см. в Span разделе "Форматированный текст".
Преобразование текста
Объект может Label преобразовать регистр текста, хранящегося в Text свойстве, задав TextTransform для свойства значение перечисления TextTransform . Это перечисление имеет четыре значения:
- None указывает, что текст не будет преобразован.
- Default указывает, что будет использоваться поведение по умолчанию для платформы. Это значение по умолчанию для свойства TextTransform .
- Lowercase указывает, что текст будет преобразован в нижний регистр.
- Uppercase указывает, что текст будет преобразован в верхний регистр.
В следующем примере показано преобразование текста в верхний регистр:
Интервалы между символами
Результатом является то, что символы в тексте, отображаемом элементом Label , разделены CharacterSpacing отдельно от устройства.
Символы перевода строки
Существует два основных метода принудительного применения текста в Label новой строке из XAML:
В следующем коде показан пример обоих методов:
Цвета
Метки можно задать для использования настраиваемого цвета текста с помощью привязываемого TextColor свойства.
Особое внимание необходимо обеспечить, чтобы цвета были пригодными для использования на каждой платформе. Так как каждая платформа имеет разные значения по умолчанию для цветов текста и фона, необходимо соблюдать осторожность, чтобы выбрать значение по умолчанию для каждого из них.
В следующем примере XAML задается цвет текста: Label
На следующих снимках экрана показан результат задания TextColor свойства:
Дополнительные сведения о цветах см. в разделе "Цвета".
Fonts
Дополнительные сведения об указании шрифтов в объекте Label см. в разделе "Шрифты".
Усечение и упаковка
Метки можно задать для обработки текста, который не может помещаться в одной строке одним из нескольких способов, предоставляемых свойством LineBreakMode . LineBreakMode — это перечисление со следующими значениями:
- HeadTruncation — усекает голову текста, показывая конец.
- CharacterWrap — упаковывает текст в новую строку на границе символа.
- MiddleTruncation — отображает начало и конец текста, а середина — многоточие.
- NoWrap — не упаковывает текст, отображая только столько текста, сколько можно поместить в одну строку.
- TailTruncation — показывает начало текста, усечение конца.
- WordWrap — обтекает текст на границе слова.
Отображение определенного количества строк
Число строк, отображаемых элементом, Label можно указать, задав Label.MaxLines для свойства int значение:
- Если MaxLines значение равно -1, являющееся значением по умолчанию, Label то значение LineBreakMode свойства будет отображаться либо только одна строка, возможно усеченная, либо все строки со всем текстом.
- Если MaxLines значение равно 0, Label оно не отображается.
- Если MaxLines значение равно 1, результат идентичен установке LineBreakMode свойства NoWrap в значение , HeadTruncation или MiddleTruncationTailTruncation . Однако значение Label свойства будет учитываться LineBreakMode в отношении размещения многоточия, если применимо.
- Если MaxLines значение больше 1, Label отображается до указанного количества строк, при этом учитывается значение LineBreakMode свойства относительно размещения многоточия, если применимо. Однако если MaxLines свойству присвоено значение больше 1, значение не действует, если LineBreakMode для свойства задано значение NoWrap .
В следующем примере XAML показано, как задать MaxLines свойство в следующем Label примере:
На следующих снимках экрана показан результат установки MaxLines свойства на 2, если текст достаточно длинный, чтобы занять более 2 строк:
Отображение HTML
Класс Label имеет свойство, которое определяет, должен ли Label экземпляр отображать обычный TextType текст или HTML-текст. Это свойство должно быть задано для одного из членов перечисления TextType :
- Text указывает, что Label будет отображаться обычный текст и является значением Label.TextType свойства по умолчанию.
- Html указывает, что Label будет отображаться HTML-текст.
Таким образом, экземпляры могут отображать HTML, Label задав Label.TextType для свойства Html значение , а Label.Text свойство — html-строку:
В приведенном выше примере двойные кавычки в HTML-коде необходимо экранировать с помощью символа \ .
В XAML строки HTML могут стать нечитаемыми из-за дополнительного < экранирования символов и >символов:
Кроме того, для повышения удобочитаемости HTML можно встраить в CDATA раздел:
В этом примере Label.Text свойству присваивается html-строка, встраиваемая в CDATA раздел. Это работает, так как Text свойство предназначено ContentProperty для Label класса.
На следующих снимках экрана показан отображаемый Label HTML-код:
Отображение HTML в a Label ограничивается HTML-тегами, поддерживаемыми базовой платформой.
Форматированный текст
Метки предоставляют FormattedText свойство, которое позволяет презентации текста с несколькими шрифтами и цветами в одном представлении.
Свойство FormattedText имеет тип FormattedString , который состоит из одного или нескольких Span экземпляров, заданных через Spans свойство. Для настройки внешнего вида визуальных элементов можно использовать следующие Span свойства:
-
— цвет фона диапазона.
- CharacterSpacing с типом double представляет собой интервал между знаками текста Span . — шрифт для текста в диапазоне. — атрибуты шрифта для текста в диапазоне. — семейство шрифтов, к которому относится шрифт для текста в диапазоне. — размер шрифта для текста в диапазоне. — цвет текста в диапазоне. Это свойство устарело и заменено свойством TextColor . — множитель, применяемый к высоте линии по умолчанию диапазона. Дополнительные сведения см. в разделе "Высота линии". — стиль, применяемый к диапазону. — текст диапазона. — цвет текста в диапазоне.
- TextDecorations — украшения, применяемые к тексту в диапазоне. Дополнительные сведения см. в разделе " Оформление текста".
Свойства BackgroundColor , Text и Text привязываемые свойства имеют режим привязки OneWay по умолчанию . Дополнительные сведения об этом режиме привязки см. в руководстве по режиму привязки по умолчанию.
Кроме того, GestureRecognizers свойство можно использовать для определения коллекции распознавателей жестов, которые будут реагировать на жесты. Span
Невозможно отобразить HTML-код в формате Span .
В следующем примере XAML демонстрируется FormattedText свойство, состоящее из трех Span экземпляров:
Свойство Text a Span можно задать с помощью привязки данных. Более подробную информацию см. в разделе Привязка данных.
Обратите внимание, что можно Span также реагировать на любые жесты, добавленные в коллекцию диапазона GestureRecognizers . Например, вторая TapGestureRecognizer добавлена во второй Span в приведенных выше примерах кода. Таким образом, если это Span будет касаться TapGestureRecognizer ответа, выполнив определенное ICommand свойством Command . Дополнительные сведения о распознавтелях жестов см. в разделе Xamarin.Forms "Жесты".
На следующих снимках экрана показан результат установки FormattedString свойства на три Span экземпляра:
Высота линии
Вертикальную высоту Label объекта и а Span можно настроить, задав Label.LineHeight свойство или Span.LineHeight double значение. В iOS и Android эти значения умножаются на исходную высоту строки, а на универсальная платформа Windows (UWP) Label.LineHeight значение свойства — это множитель размера шрифта метки.
- В iOS Label.LineHeight и Span.LineHeight свойства изменяют высоту строки текста, который помещается в одну строку, и текст, который переносится на несколько строк.
- В Android Label.LineHeight свойства изменяют Span.LineHeight только высоту строки, которая переносится на несколько строк.
- В UWP Label.LineHeight свойство изменяет высоту строки текста, которая переносится на несколько строк, и Span.LineHeight свойство не оказывает влияния.
В следующем примере XAML показано, как задать LineHeight свойство в следующем Label примере:
На следующих снимках экрана показан результат установки Label.LineHeight свойства на 1.8:
В следующем примере XAML показано, как задать LineHeight свойство в следующем Span примере:
На следующих снимках экрана показан результат установки Span.LineHeight свойства на 1.8:
Заполнение
Заполнение представляет пространство между элементом и его дочерними элементами и используется для разделения элемента от собственного содержимого. Заполнение можно применить к Label экземплярам, задав Label.Padding для свойства Thickness значение:
В iOS при Label создании, которое задает Padding свойство, будет применено заполнение, а значение заполнения можно будет обновить позже. Однако при Label создании свойства, который не задает свойство, попытка установить его позже не будет иметь никакого Padding эффекта.
В Android и универсальная платформа Windows Padding значение свойства можно указать при Label создании или более поздней версии.
Дополнительные сведения о заполнении см. в разделе "Поля" и "Заполнение".
Гиперссылки
Текст, отображаемый Label и Span экземпляры, можно превратить в гиперссылки с помощью следующего подхода:
- TextColor Задание и TextDecoration свойства объекта Label или Span .
- Добавьте коллекцию TapGestureRecognizerLabelGestureRecognizers или Span , свойство которого Command привязывается к объекту ICommand , а CommandParameter свойство содержит ОТКРЫТЫй URL-адрес.
- Определите ICommand , что будет выполняться объектом TapGestureRecognizer .
- Напишите код, который будет выполняться объектом ICommand .
В следующем примере кода, взятом из примера "Демонстрации гиперссылок" , показано Label содержимое, содержимое которого задается из нескольких Span экземпляров:
В этом примере первый и третий Span экземпляры состоят из текста, а второй Span представляет неприменимую гиперссылку. Он имеет цвет текста синего цвета и имеет подчеркивание оформления текста. Это создает внешний вид гиперссылки, как показано на следующих снимках экрана:
При нажатии гиперссылки ответит, TapGestureRecognizer выполнив определенный ICommand свойством объект Command . Кроме того, URL-адрес, указанный CommandParameter свойством, будет передан ICommand в качестве параметра.
Код программной части страницы XAML содержит реализацию TapCommand :
Создание повторно используемых классов гиперссылок
Предыдущий подход к созданию гиперссылки требует написания повторяющегося кода каждый раз, когда требуется гиперссылка в приложении. Label Span Однако и классы могут быть подклассами для создания HyperlinkLabel и HyperlinkSpan классов с добавленным в нее кодом распознавателя жестов и форматирования текста.
В следующем примере кода, взятом из примера "Демонстрации гиперссылок" , показан HyperlinkSpan класс:
Класс HyperlinkSpan определяет свойство и связанный Url BindableProperty , а конструктор задает внешний вид гиперссылки и TapGestureRecognizer ответ, который будет реагировать при нажатии гиперссылки. HyperlinkSpan При нажатии на запрос TapGestureRecognizer будет выполнен Launcher.OpenAsync метод, чтобы открыть URL-адрес, указанный свойством Url , в веб-браузере.
Класс HyperlinkSpan можно использовать, добавив экземпляр класса в XAML:
Стилизация меток
В предыдущих разделах описаны параметры Label и Span свойства для каждого экземпляра. Однако наборы свойств можно сгруппировать в один стиль, который последовательно применяется к одному или нескольким представлениям. Это может повысить удобочитаемость кода и упростить реализацию изменений проектирования. Дополнительные сведения см. в статье "Стили".
Как можно получить функцию переноса слов для Label текста, выходящего за границы?
Быстрый ответ: выключите off AutoSize.
Большая проблема здесь в том, что метка не меняет автоматически свою высоту (только ширину). Чтобы сделать это правильно, вам нужно будет создать подкласс метки и включить логику вертикального изменения размера.
В основном, что вам нужно сделать в OnPaint:
- Измерьте высоту текста (Graphics.MeasureString).
- Если высота метки не равна высоте текста, установите высоту и верните.
- Нарисуйте текст.
Вам также потребуется установить флаг стиля ResizeRedraw в конструкторе.
На самом деле принятый ответ излишне сложен.
Если вы установите для метки значение AutoSize, она будет автоматически увеличиваться вместе с любым текстом, который вы в нее поместите. (Это включает вертикальный рост.)
Если вы хотите использовать перенос слов определенной ширины, вы можете установить свойство MaximumSize.
Проверено и работает.
В моем случае (ярлык на панели) я установил label.AutoSize = false и label.Dock = Fill . И текст метки переносится автоматически.
Свойство autowrap отсутствует, но это можно сделать программно для динамического изменения размера. Вот одно из решений:
Выберите свойства метки
MaximumSize = ( Ширина , Высота ), где Ширина = максимальный размер, который требуется для подписи, а Высота = сколько пикселей вы хотите обернуть
Мне нужно было найти быстрое решение, поэтому я просто использовал TextBox с такими свойствами:
Получите лучший вариант на основе ответа @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width; это позволяет использовать автоматически увеличивающийся ярлык при стыковке с родительским, например панель.
this.Height = sz.Height + Padding.Bottom + Padding.Top; здесь мы позаботимся о заполнении сверху и снизу.
Возьмите ClientSizeChanged event панели, сделав этикетка заполнить пространство:
Установите Auto-Size для метки на true
Не уверен, что он подойдет для всех вариантов использования, но я часто использую простой трюк, чтобы получить поведение упаковки: поместите свой Label с AutoSize=false внутрь 1x1 TableLayoutPanel , который позаботится о размере Label .
Установите для свойства AutoEllipsis значение «TRUE», а для свойства AutoSize - значение «FALSE».
Если ваша панель ограничивает ширину вашей метки, вы можете установить для свойства Anchor метки значение «Влево», «Вправо» и установить для параметра AutoSize значение true. Это концептуально похоже на прослушивание события Panel SizeChanged и обновление MaximumSize метки до new Size(((Control)sender).Size.Width, 0) , как предлагается предыдущий ответ. Каждая сторона, указанная в свойстве Anchor, привязана к соответствующей внутренней стороне содержащего Control. Таким образом, перечисление двух противоположных сторон в Anchor фактически устанавливает размер элемента управления. Привязка к левому и правому краю устанавливает свойство ширины элемента управления, а привязка к верхнему и нижнему краям задает его свойство высоты.
Это помогло мне в моей форме под названием InpitWindow: в конструкторе для этикеток:
Если размеры кнопки нужно оставить без изменений:
Простой ответ на эту проблему - изменить свойство DOCK метки. По умолчанию это "НЕТ".
Если вы заранее вводите текст в этикетку, вы можете это сделать.
- В дизайнере щелкните этикетку правой кнопкой мыши и выберите «Свойства».
- В свойствах найдите текстовую вкладку.
- Щелкните вкладку и нажмите кнопку со стрелкой рядом с ней.
- Над ним появится окно.
- Вы можете нажать Enter во всплывающем окне, чтобы добавить строки и ввести как в блокноте! (НАЖМИТЕ ВВОД, ГДЕ ВЫ ХОТИТЕ ЗАВЕРШИТЬ ТЕКСТ ЭТИКЕТКИ)
Я бы рекомендовал установить свойство AutoEllipsis ярлыка на true и AutoSize на false . Если длина текста превышает границы метки, он добавит три точки (. ) в конце и автоматически установит весь текст как всплывающую подсказку. Таким образом, пользователи могут видеть весь текст, наведя указатель мыши на ярлык.
Используйте style="overflow:Scroll" в ярлыке, как в приведенном ниже HTML. Это добавит полосу прокрутки в метку на панели.
Если вы действительно хотите установить ширину метки независимо от содержимого, я считаю, что самый простой способ - это:
- Установить авторазмер true
- Установите максимальную ширину так, как вы хотите
- Установите одинаковую минимальную ширину
Теперь этикетка имеет постоянную ширину, но она автоматически адаптирует свою высоту.
Затем для динамического текста уменьшите размер шрифта. При необходимости используйте этот фрагмент в подпрограмме, где установлен текст метки:
Как мы можем получить функциональность word wrap для метки в Windows Forms?
Я разместил метку на панели и добавил текст для динамической метки. Но она превышает длину панели. Как я могу это решить?
быстрый ответ: переключатель выкл AutoSize.
большая проблема здесь в том, что метка не будет автоматически изменять свою высоту (только ширину). Чтобы получить это право, вам нужно будет подкласс метки и включить логику вертикального изменения размера.
в основном, что вам нужно сделать в OnPaint:
- измерение высоты текста (графика.MeasureString).
- если высота ярлыка не равна высоте текст устанавливает высоту и возврат.
- рисовать текст.
Вам также нужно будет установить ResizeRedraw флаг стиля в конструкторе.
на самом деле, принятый ответ излишне сложен.
Если вы установите метку для автоматической настройки, она будет автоматически расти с любым текстом, который вы в нее поместите. (Это включает вертикальный рост.)
Если вы хотите сделать его переносом слов на определенную ширину, вы можете установить свойство MaximumSize.
проверено и работает.
в моем случае (метка на панели) я установил label.AutoSize = false и label.Dock = Fill . И текст ярлыка обернут автоматически.
вы можете выполнить это программно для динамического размера, но вот самое простое решение:
- выберите Свойства метки
- AutoSize = True
MaximumSize = (ширина, Высота), где ширина = максимальный размер вы хотите ярлык быть и Высота = сколько пикселей вы хотите, чтобы обернуть
Мне нужно было найти быстрое решение, поэтому я просто использовал текстовое поле с этими свойствами:
есть лучший, основанный на ответе @hypo ' s
int width = this.Parent == null ? this.Width : this.Parent.Width; это позволяет использовать метку автоматического роста при стыковке с родительским элементом, например панелью.
this.Height = sz.Height + Padding.Bottom + Padding.Top; здесь мы позаботимся о прокладке для верхней части и дна.
обработки ClientSizeChanged event панели, что делает метка заполнить пробел:
Set Auto-Size для метки true
не уверен, что он будет соответствовать всем прецедентам, но я часто использую простой трюк, чтобы получить поведение упаковки: положите ваш Label с AutoSize=false внутри 1x1 TableLayoutPanel который позаботится о Label 's размер.
установите для свойства AutoEllipsis значение "TRUE", а для свойства AutoSize - "FALSE".
Если ваша панель ограничивает ширину вашей метки, Вы можете установить свойство привязки метки влево, вправо и установить AutoSize в true. Это концептуально похоже на прослушивание панели SizeChanged событие и обновление MaximumSize метки до new Size(((Control)sender).Size.Width, 0) как было предложено предыдущий ответ. Каждая сторона, перечисленная в свойстве Anchor, хорошо привязана к соответствующей внутренней стороне содержащего элемента управления. Таким образом, перечисление двух противоположных сторон в Anchor эффективно устанавливает измерение контроля. Привязка слева и справа задает свойство Width элемента управления, а привязка сверху и снизу-свойство Height.
Если вы действительно хотите установить ширину метки независимо от содержимого, я считаю, что самый простой способ:
- установить autosize true
- установить максимальную ширину, как вы хотите это
- установить минимальную ширину тож
теперь метка имеет постоянную ширину, но она автоматически адаптирует свою высоту.
затем для динамического текста уменьшите размер шрифта. При необходимости используйте этот фрагмент в подразделе, где находится текст метки set:
это помогло мне в моей форме под названием InpitWindow: В конструкторе для этикетки:
Если размеры кнопки необходимо сохранить без изменений:
простым ответом на эту проблему является изменение свойства DOCK метки. По умолчанию это "NONE".
использовать style="overflow:Scroll" в метке, как в приведенном ниже HTML. Это добавит полосу прокрутки в метку внутри панели.
Читайте также: