2010-05-25 6 views
6

Tengo una aplicación .NET con un StatusStrip que contiene tres ToolTipStatusLabels. El texto de las etiquetas se completa desde la aplicación, ya que muestran el estado. En algunas circunstancias, pueden contener un texto vacío.indicar el truncamiento en ToolTipStatusLabel automáticamente

Cuando cambio el tamaño de la ventana, las etiquetas ToolTipStatusLabels se ocultan cuando no se pueden ajustar en la barra de estado. Me gustaría tener el texto truncado cuando la etiqueta no se puede ajustar en el StatusStrip. El comportamiento predeterminado para ocultar la etiqueta hace que sea difícil distinguir entre texto vacío o etiqueta oculta.

Para indicar que el texto se trunca automáticamente, esto debe indicarse con puntos suspensivos (...). ¿Cómo puede hacerse esto?

Respuesta

11

Establezca la propiedad Spring de la etiqueta en True para obtener es ajustar su tamaño automáticamente. Para obtener elipses necesitarás anular la pintura. Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Obtendrá el nuevo control SpringLabel en la lista desplegable del diseñador de la tira de estado.

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.StatusStrip)] 
public class SpringLabel : ToolStripStatusLabel { 
    public SpringLabel() { 
     this.Spring = true; 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     var flags = TextFormatFlags.Left | TextFormatFlags.EndEllipsis; 
     var bounds = new Rectangle(0, 0, this.Bounds.Width, this.Bounds.Height); 
     TextRenderer.DrawText(e.Graphics, this.Text, this.Font, bounds, this.ForeColor, flags); 
    } 
} 

Tendrá que trabajar más si utiliza las propiedades Image o TextAlign.

+0

Bueno, esta clase agrega las elipsis cuando se establece la propiedad Spring. Pero tengo más de una ToolStripStatusLabel (o SpringLabel ahora), real hay tres. Cuando cambio el tamaño de la ventana, solo la última etiqueta visible debe ser truncada. Establecer la propiedad Spring hace que todos cambien de tamaño a la vez. ¿Hay alguna forma de capturar el evento de cambio de tamaño y establecer selectivamente la propiedad Spring del vecino izquierdo, cuando el rectángulo delimitador es de tamaño cero? – harper

+0

Utilice el evento StatusStrip.Resize y configure los tamaños de las etiquetas usted mismo. –

+0

Daría este +10 si pudiera –

Cuestiones relacionadas