¿Cómo se puede obtener la funcionalidad de ajuste Label
de texto para un texto que sale de los límites?
184
La respuesta rápida: apague AutoSize .
El gran problema aquí es que la etiqueta no cambiará su altura automáticamente (solo ancho). Para hacerlo correctamente, deberá subclasificar la etiqueta e incluir la lógica de cambio de tamaño vertical.
Básicamente, lo que debe hacer en OnPaint es:
También deberá establecer el indicador de estilo ResizeRedraw en el constructor.
En realidad, la respuesta aceptada es innecesariamente complicada.
Si configura la etiqueta en AutoSize, crecerá automáticamente con el texto que ponga. (Esto incluye crecimiento vertical).
Si desea que se ajuste la palabra en un ancho particular, puede establecer la propiedad MaximumSize.
Probado y funciona.
fuente
Dock
propiedad de la etiqueta y el panel enTop
lugar de mi solución.OnResize
la matriz y la llamadamyLabel.MaximumSize = new Size(Bounds.Width, 0);
En mi caso (etiqueta en un panel) configuré
label.AutoSize = false
ylabel.Dock = Fill
. Y el texto de la etiqueta se ajusta automáticamente.fuente
No existe una propiedad de ajuste automático, pero esto se puede hacer mediante programación para dimensionarlo dinámicamente. Aquí hay una solución:
Seleccione las propiedades de la etiqueta.
AutoSize
=True
MaximumSize
= ( Ancho , Altura ) donde Ancho = tamaño máximo que desea que sea la etiqueta y Altura = cuántos píxeles desea que se ajustefuente
Desde MSDN , Ajustar automáticamente el texto en la etiqueta :
fuente
Height = sz.Height + Padding.Vertical;
)Tenía que encontrar una solución rápida, así que solo usé un TextBox con esas propiedades:
fuente
Tener uno mejor basado en la respuesta de @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width;
esto le permite usar la etiqueta de crecimiento automático cuando está acoplada a un padre, por ejemplo, un panel.this.Height = sz.Height + Padding.Bottom + Padding.Top;
aquí nos encargamos del relleno para arriba y abajo.fuente
Maneje el
ClientSizeChanged event
para el panel, haciendo que la etiqueta llene el espacio:Establecer
Auto-Size
para la etiqueta atrue
Dock
para la etiqueta aFill
fuente
No estoy seguro de que encajará todos los casos de uso, pero a menudo utilizar un simple truco para obtener el comportamiento de embalaje: poner su
Label
conAutoSize=false
el interior de un 1x1TableLayoutPanel
que se encargará delLabel
tamaño 's.fuente
Establezca la propiedad AutoEllipsis en 'TRUE' y la propiedad AutoSize en 'FALSE'.
fuente
Si su panel está limitando el ancho de su etiqueta, puede establecer la propiedad Anchor de su etiqueta en Left, Right y establecer AutoSize en true. Esto es conceptualmente similar a escuchar el
SizeChanged
evento del Panel y actualizar el Tamaño máximo de la etiqueta anew Size(((Control)sender).Size.Width, 0)
lo sugerido por una respuesta anterior . Todos los lados enumerados en la propiedad Anchor están, bueno, anclados al lado interno respectivo del Control que lo contiene. Entonces, enumerar dos lados opuestos en Anchor establece efectivamente la dimensión del control. Anclar a izquierda y derecha establece la propiedad Ancho del control y Anclar a superior e inferior establecería su propiedad Altura.Esta solución, como C #:
fuente
Si realmente desea establecer el ancho de la etiqueta independientemente del contenido, creo que la forma más fácil es esta:
Ahora la etiqueta tiene un ancho constante, pero adapta su altura automáticamente.
Luego, para el texto dinámico, disminuya el tamaño de la fuente. Si es necesario, use este fragmento en el subtítulo donde se establece el texto de la etiqueta:
fuente
Esto me ayudó en mi formulario llamado InpitWindow: In Designer for Label:
Código completo de mi formulario
fuente
Si las dimensiones del botón deben mantenerse sin cambios:
fuente
La respuesta simple para este problema es cambiar la propiedad DOCK de la etiqueta. Es "NINGUNO" por defecto.
fuente
fuente
Úselo
style="overflow:Scroll"
en la etiqueta como en el siguiente HTML. Esto agregará la barra de desplazamiento en la etiqueta dentro del panel.fuente