none
Replanteo una pregunta. Ahora tengo un avance, ya sé qué es lo que no funciona, lo que no logro es solucionarlo. A ver si alguien me puede dar una luz. RRS feed

  • Pregunta

  • LO QUE DESEO:

    Deseo obtener el texto exacto que un control Label muestra.

    Cuando la cadena es más corta que el ancho del Label, la propiedad Text devuelve justo lo que se ve, pero cuando la cadena sobrepasa el ancho del Label devuelve toda la cadena y no solo la parte visible que es lo que deseo.

    LO QUE PUDE COMPROBAR:

    El código adjunto funciona bien cuando comento la línea que dice:

    'Label1.Font = New Font(FontFamily.GenericSansSerif, 10, GraphicsUnit.Point)

    Es decir, cuando dejo la fuente y el tamaño por defecto (8.25) sí funciona bien, por lo que me parece que es cuestión de sincronizar unidades de medida.

    Para probar el código solo hay que añadir un control Label y un control Button a un proyecto en blanco. Adjunto también la salida. Obsérvese que para una fuente de tamaño 10 el texto del círculo rojo no debería verse.

    Public Class Form1
    
      Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Dim nPosicion As Integer
        Dim nLineas As Integer
        Dim Formato As StringFormat = StringFormat.GenericTypographic
        Dim Grafico As Graphics = Label1.CreateGraphics()
    
        Label1.BackColor = Color.Yellow
        Label1.AutoSize = False
        Label1.Size = New Size(200, 24)
        Label1.Font = New Font(FontFamily.GenericSansSerif, 10, GraphicsUnit.Point)
        Label1.Text = "En la linea de abajo se debe ver lo mismo que en el Label."
    
        Grafico.MeasureString(Label1.Text, Label1.Font, Label1.ClientSize, Formato, nPosicion, nLineas)
    
        Grafico.Dispose()
        Dim textoVisible = Label1.Text.Substring(0, nPosicion)
    
        MessageBox.Show("Original ==> " & Label1.Text & Chr(13) & "Visible ==> " & "|" & textoVisible & "|")
      End Sub
    
    End Class
    

    martes, 18 de agosto de 2020 17:38

Respuestas

  • Finalmente lo he conseguido y ya que nadie me dio una respuesta satisfactoria pongo aquí cómo lo conseguí.

    A quien le sirva, poniendo la propiedad del control Label, FlatStyle al valor de System, devuelve el texto exacto para cualquier tamaño.


    martes, 18 de agosto de 2020 21:35
  • De acuerdo, muchas gracias por compartir la respuesta acerca de tu consulta! Si tienes alguna otra duda, usa los foros de MSDN, es un placer atender tus consultas.

    Saludos!

    martes, 18 de agosto de 2020 23:01
    Moderador

Todas las respuestas