TextBox incluyendo AutoElipsis

Descripción general

Función que permite cortar un texto añadiendo al final puntos suspensivos. La gracia de la misma es que utiliza clases.NET

Una de las cosas que hace tiempo quería hacer es escribir un código que pusiera en un [TextBox] unos puntos suspensivos al final del texto para indicar que había más texto del que cabe en el cuadro de texto. Para mi sorpresa he visto que el control [Label] ya lo tiene incluido pero el control [TextBox] no.

Nunca me venía bien hasta que no he tenido más remedio que escribirlo, por lo que antes de escribir una sola línea de código y para no reinventar la rueda he mirado a ver qué es lo que habían hecho otros programadores.

Como se puede suponer he encontrado varios códigos que hacen este trabajo, algunos de ellos muy interesantes, pero que más me ha gustado es el que figura en

Use the .NET framework to shorten a path string with an ellipsis

Al final, esta es la función que he escrito y he guardado en mi repositorio de funciones :-)

'---------------------------------------------------------------
' Esta es la función que realmente hace el trabajo de de poner los puntos suspensivos al texto
'---------------------------------------------------------------
''' <summary>
'''   Trunca una cadena de texto añadiendo el carácter puntos suspensivos (...), 
'''   si el tamaño de la cadena de texto excede el tamaño máximo permitido
''' </summary>
''' <param name="cadenaOriginal">
'''    <para> Tipo:<see cref="System.String">String</see>    </para>
'''    <para> La cadena que se va a tratar</para>
''' </param> 
''' <param name="anchuraMaxima">
'''    <para> Tipo:<see cref="System.Integer">Integer</see>    </para>
'''    <para> Ancho del control, en píxeles. </para>
'''    <para> La anchura máxima que puede tener la cadena (en píxeles) </para>
''' </param>
''' <param name="fuenteDelTexto"> 
'''    <para> Tipo.: <see cref="System.Drawing.Font">Drawing.Font</see> </para>
'''    <para> La fuente con la que se ha escrito el texto. </para>
'''    <para> Segun el tamaño de la fuente caben más o menos caracteres en un espacio determinado </para>
''' </param>
''' <param name="formatoAplicado">
'''    <para> Tipo:<see cref="System.Windows.Forms.TextFormatFlags">
'''           Windows.Forms.TextFormatFlags</see></para>
'''    <para> Especifica la información de diseño y de presentación de las cadenas de texto. </para>
'''    <para> Esta enumeración tiene un atributo FlagsAttribute que 
'''           permite una combinación bit a bit de los valores de miembro. </para>
''' </param>
''' <returns>
'''    <para> Tipo:<see cref="System.String">String</see>   </para>
'''    <para> Una cadena con el formato [AutoEllipsis] aplicado </para>
''' </returns>
''' <remarks>
'''    <para>  Trunca una cadena de texto añadiendo el carácter puntos suspensivos (...), 
'''            si el tamaño de la cadena de texto excede el tamaño máximo permitido
'''    </para>
'''    <para>  Tunca una cadena de texto Funciona de forma parecida a la 
'''            propiedad [Label.AutoEllipsis] añadiendo el carácter de puntos suspensivos (...) 
'''            normalmente a la derecha del texto, para indicar que el texto original 
'''            excede del tamaño máximo marcado
'''    </para>
'''    <para>  La situación de los puntos suspensivos (...) está indicado por el valor 
'''            de la enumeración [Windows.Forms.TextFormatFlags]
'''    </para>
'''    <example> Para saber más
'''       <code> http://www.codeproject.com/KB/vb/NewPathCompactPath.aspx </code>
'''       <code> http://msdn.microsoft.com/es-es/library/system.windows.forms.textformatflags.aspx </code>
'''       <code> http://msdn.microsoft.com/es-es/library/7sy6awsb.aspx </code>
'''       <code> http://msdn.microsoft.com/es-es/library/system.windows.forms.label.autoellipsis.aspx </code>
'''    </example>
'''    <example> 
''' --------------------------------------------------- 
'''  Ejemplo de uso
''' --------------------------------------------------- 
''' 'Escuchador del evento [TextChanged] de un TextBox
''' '--------------
''' Private Sub TextBox1_TextChanged( _
'''             sender As System.Object, e As System.EventArgs) _
'''             Handles TextBox1.TextChanged
''' 
'''     TextBox1.Text = AutoElipsisTextBox.CompactString( _
'''                     TextBox1.Text, _
'''                     TextBox1.Width, _
'''                     TextBox1.Font, _
'''                     TextFormatFlags.EndEllipsis)
''' End Sub
''' --------------------------------------------------- 
'''    </example>
'''    <Historial>
'''       <para> Creado el : 2011-12-03-17:11</para>
'''       <para> Autor.: Joaquín Medina Serrano </para>
'''       <para> Licencia.: Acogido a la licencia de The Code Project Open License (CPOL) 
'''             <code>http://www.codeproject.com/info/cpol10.aspx </code>
'''       </para>
'''    </Historial>
''' </remarks>
Private Shared Function CompactString( _
    ByVal cadenaOriginal As String, _
    ByVal anchuraMaxima As Integer,
    ByVal fuenteDelTexto As Drawing.Font,
    ByVal formatoAplicado As Windows.Forms.TextFormatFlags) _
    As String

    Dim cadenaCompactada As String = String.Copy(cadenaOriginal)

    Call TextRenderer.MeasureText( _
    cadenaCompactada, _
    fuenteDelTexto, _
    New Drawing.Size(anchuraMaxima, 0), _
    formatoAplicado Or TextFormatFlags.ModifyString)
    ' 
    Return cadenaCompactada

End Function

He usado ese código porque me parece muy sencillo y además estoy de acuerdo con las ideas que expone el autor en su artículo

Al final he escrito un control[TextBox] que dispone de la propiedad [AutoElipsis] y que funciona como se espera que funcione.


↑↑↑

Enlace de descarga

Imagen de descarga de instalador Enlace para descargarte un fichero (comprimido ZIP) con el control Imagen de descarga de instalador

En este documento hay un pequeño FAQ sobre MD5


↑↑↑

Código Md5 para los paranoicos

' 
' -----------------------------------------------
' HerramientaHash 
' Fecha del cálculo: 2011-12-04T12:12:16 
'  -----------------------------------------------
' Tipo .....: Fichero 
' Nombre ...:TextBoxAutoElipsis.zip
' Tamaño ...: 0,00 Mb  [4 533 Bytes] 
'  ---Fechas interesantes del fichero ---- 
' Creación .........: 2011-12-04 13:11:58Z  
'  -----------------------------------------------
'  Md5      Checksum: EB0DF4BFEE777E4475E9163D544108D0
'  SHA1     Checksum: A135A99D355224350392A70E8607DC388F2948DB
'  SHA256   Checksum: 1EB75EE14F1C09383A3D57C8A6FC45C62538F1A7554B8C56E6FB4D422BA32F77
'  SHA384   Checksum: 11375F248B18543C1881D2C98A6B6B0FDF183A372B46D27BB6F057BB2BF3816DF6974388EEF486AA447AB30FF6767C55
'  SHA512   Checksum: 089AC68A9C29A708087FA74E979F9086F9ED05C23BA1A0139186CA79B2E4FE4C69D49DE9860FE5922AD5B26D9B3F1DE4756AD8C1F9DB3D9055CFDE7A454551F1
'  -----------------------------------------------
'  /eof
' 

¿Qué hago si obtengo un valor diferente?

Si se te da el caso de que el checksum del fichero no coincide con el que obtengas, puede ser por varias razones, la más probable es que por algún despiste haya puesto mal el valor Hash. Otra posibilidad, mucho más peligrosa, es que alguien haya cambiado el contenido del fichero y estés descargando cualquier cosa innombrable

En cualquier caso:


↑↑↑

A.1.Referencias

AutoElipsis
Label.AutoEllipsis (Propiedad)
TextFormatFlags
TextFormatFlags (Enumeración)
TextBox
TextBox (Clase)

↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]