2010-03-07 9 views
6

Existe un control inteligente de cuadro de texto (WinForms) que puede mostrar una ruta dependiendo del ancho de la caja de texto. Por ejemplo, si la ruta es corta, mostrará la ruta completa (C: \ myfile.txt), pero si la ruta es larga, mostrará el inicio y el final (C: \ SomeFolder ... \ foo \ MyFile.txt) La longitud de los caracteres mostrados debe calcularse (dinámicamente) mediante el cuadro de texto utilizando su ancho. Cualquier sugerencia comercial o de código abierto es bienvenida. Muchas gracias.C# WinForms - Smart TextBox Control para formatear automáticamente la longitud de la ruta en función del ancho de la casilla de texto

Respuesta

15

Sí, es una capacidad incorporada del método TextRenderer.DrawText(). Una de sus sobrecargas acepta un argumento TextFormatFlags, puede pasar TextFormatFlags.PathEllipsis. Hacer esto para un TextBox no es apropiado, el usuario no puede editar razonablemente una ruta tan abreviada, no tendría idea de cuál podría ser la ruta original. Una etiqueta es el mejor control.

Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de la caja de herramientas en su formulario. No lo hagas muy pequeño.

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

class PathLabel : Label { 
    [Browsable(false)] 
    public override bool AutoSize { 
    get { return base.AutoSize; } 
    set { base.AutoSize = false; } 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
    TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.PathEllipsis; 
    TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, flags); 
    } 
} 
+0

+1 Hans! ¡Esto es exactamente lo que estaba buscando! :) –

+0

Esto es genial! Sin embargo, cuando configuro 'Graphics' como' SmoothingMode.AntiAlias', el TextRenderer no parece respetarlo. – petejamd

Cuestiones relacionadas