Как можно получить функциональность переноса слов Label
для текста, который выходит за пределы?
184
Быстрый ответ: выключите AutoSize .
Большая проблема здесь в том, что метка не изменит свою высоту автоматически (только ширина). Чтобы сделать это правильно, вам нужно будет создать подкласс метки и включить логику вертикального изменения размера.
В основном, что вам нужно сделать в OnPaint:
Вам также нужно будет установить флаг стиля ResizeRedraw в конструкторе.
На самом деле, принятый ответ излишне сложен.
Если вы установите метку в AutoSize, она будет автоматически расти вместе с тем текстом, который вы в нее поместите. (Это включает вертикальный рост.)
Если вы хотите сделать перенос слов определенной ширины, вы можете установить свойство MaximumSize.
Проверено и работает.
источник
Dock
свойство как метки, так и панелиTop
вместо моего решения.OnResize
в родителя и позвонилmyLabel.MaximumSize = new Size(Bounds.Width, 0);
В моем случае (метка на панели) я установил
label.AutoSize = false
иlabel.Dock = Fill
. И текст метки оборачивается автоматически.источник
Свойство autowrap отсутствует, но это можно сделать программно для его динамического определения размера. Вот одно из решений:
Выберите свойства метки
AutoSize
знак равноTrue
MaximumSize
= ( Ширина , высота ) где ширина = максимальный размер метки, а высота = количество пикселей, которое нужно обернутьисточник
Из MSDN , автоматический перенос текста в этикетках :
источник
Height = sz.Height + Padding.Vertical;
)Мне нужно было найти быстрое решение, поэтому я просто использовал 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
Dock
для ярлыкаFill
источник
Не уверен , что это будет соответствовать все примеры использования , но я часто использую простой трюк , чтобы получить поведение оберточной: положить ваши
Label
сAutoSize=false
внутри 1x1 ,TableLayoutPanel
который будет заботиться оLabel
размере «s.источник
Установите для свойства AutoEllipsis значение TRUE, а для свойства AutoSize - значение FALSE.
источник
Если ваша панель ограничивает ширину вашей метки, вы можете установить свойство привязки вашей метки влево, вправо и установить для AutoSize значение true. Концептуально это похоже на прослушивание
SizeChanged
события Panel и обновление MaximumSize метки до a,new Size(((Control)sender).Size.Width, 0)
как было предложено в предыдущем ответе. . Каждая сторона, указанная в свойстве Anchor, хорошо привязана к соответствующей внутренней стороне содержащего элемента управления. Таким образом, перечисление двух противоположных сторон в Anchor эффективно устанавливает размерность элемента управления. Привязка к левому и правому краям устанавливает свойство Width элемента управления, а привязка к верхнему и нижнему элементам устанавливает его свойство Height.Это решение, как C #:
источник
Если вы действительно хотите установить ширину метки независимо от содержимого, я считаю, что самый простой способ это:
Теперь метка имеет постоянную ширину, но она автоматически адаптируется к своей высоте.
Затем для динамического текста уменьшите размер шрифта. При необходимости используйте этот фрагмент в подпрограмме, где установлен текст метки:
источник
Это помогло мне в моей форме под названием InpitWindow: в Designer for Label:
Весь код моей формы
источник
Если размеры кнопки нужно оставить без изменений:
источник
Простой ответ для этой проблемы - изменить свойство DOCK метки. По умолчанию это «NONE».
источник
источник
Используйте
style="overflow:Scroll"
в метке, как в приведенном ниже HTML. Это добавит полосу прокрутки в метку на панели.источник