none
¿Me ayudan con este código? ¿Por qué no obtengo la cadena exacta? RRS feed

  • Pregunta

  • Para probar el código solo hay que crear un proyecto, añadir una etiqueta y un botón y pegar el código adjunto.

    Trato de obtener el texto visible en la etiqueta, tal como aparece, pero se ve el texto "ver " demás (encerrado en rojo).

    (El primer y último caracter de la segunda línea los añadí para que se aprecie exactamente la cadena devuelta, incluidos los espacios). Obviamente se debe obtener el texto visible exacto para cualquier otro texto.

    Me parece que es cuestión de ajustar el formato o el parámetro del tamaño (o en todo caso, algún código alternativo que haga lo mismo). Allí está el código y una imagen de la ejecución:

    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 Grafico As Graphics = Label1.CreateGraphics()
        Dim Formato As New StringFormat(StringFormatFlags.LineLimit)
    
        Label1.BackColor = Color.Yellow
        Label1.AutoSize = False
        Label1.Size = New Size(204, 24)
        Label1.Text = "En la linea de abajo se debe ver lo mismo que en el Label."
        Label1.Font = New Font("Microsoft Sans Serif", 10)
    
        Grafico.MeasureString(Label1.Text, Label1.Font, Label1.Size, Formato, nPosicion, nLineas)
        Grafico.Dispose()
        Dim cTextoVisible = Label1.Text.Substring(0, nPosicion)
    
        MessageBox.Show("Original ==> " & Label1.Text & Chr(13) & "Visible ==> " & "|" & cTextoVisible & "|")
      End Sub
    
    End Class







    • Editado James2016-2 lunes, 17 de agosto de 2020 15:52
    lunes, 17 de agosto de 2020 15:43

Respuestas

  • Hola James2016-2, 

      

    Gracias por levantar tu consulta en los foros de MSDN. 

    Me gustaría saber que valor estas pasando en la variable nPosicion, ya que se debe estar almacenando un valor de más y esto hace que se este imprimiendo el "ver". Debería de tener un valor de 6.

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    • Marcado como respuesta James2016-2 lunes, 17 de agosto de 2020 18:49
    • Desmarcado como respuesta James2016-2 lunes, 17 de agosto de 2020 18:49
    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:32
    lunes, 17 de agosto de 2020 17:30
    Moderador

Todas las respuestas

  • Hola James2016-2, 

      

    Gracias por levantar tu consulta en los foros de MSDN. 

    Me gustaría saber que valor estas pasando en la variable nPosicion, ya que se debe estar almacenando un valor de más y esto hace que se este imprimiendo el "ver". Debería de tener un valor de 6.

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    • Marcado como respuesta James2016-2 lunes, 17 de agosto de 2020 18:49
    • Desmarcado como respuesta James2016-2 lunes, 17 de agosto de 2020 18:49
    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:32
    lunes, 17 de agosto de 2020 17:30
    Moderador
  • Hola James2016-2, 

      

    Gracias por levantar tu consulta en los foros de MSDN. 

    Me gustaría saber que valor estas pasando en la variable nPosicion, ya que se debe estar almacenando un valor de más y esto hace que se este imprimiendo el "ver". Debería de tener un valor de 6.

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    MeasureString le asigna el valor a nPosicion.
    lunes, 17 de agosto de 2020 18:51
  • Deleted
    lunes, 17 de agosto de 2020 19:31
  • Yo diría que los flags del StringFormat deberían ser los mismos que usa la instancia de StringFormat devuelta por GenericTypographics (NoClip Or FitBlackBox Or LineLimit).
    Hola, me parece también que por allí va la cosa pero estoy probando y con ninguno consigo, aún, lo que deseo.
    lunes, 17 de agosto de 2020 21:47
  • si lo que quieres es quitar la palabra ver mira el codigo
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim nPosicion As Integer
            Dim nLineas As Integer
            Dim Grafico As Graphics = Label1.CreateGraphics()
            Dim Formato As New StringFormat(StringFormatFlags.LineLimit)
    
            Label1.BackColor = Color.Yellow
            Label1.AutoSize = False
            Label1.Size = New Size(204, 24)
            Label1.Text = "En la linea de abajo se debe ver lo mismo que en el Label."
            Label1.Font = New Font("Microsoft Sans Serif", 10)
    
            Grafico.MeasureString(Label1.Text, Label1.Font, Label1.Size, Formato, nPosicion, nLineas)
            Grafico.Dispose()
            Dim cTextoVisible = Label1.Text.Substring(0, nPosicion - 4)
    
            MessageBox.Show("Original ==> " & Label1.Text & Chr(13) & "Visible ==> " & "|" & cTextoVisible & "|")
        End Sub
    End Class
    

    martes, 18 de agosto de 2020 2:21
  • si lo que quieres es quitar la palabra ver mira el codigo
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim nPosicion As Integer
            Dim nLineas As Integer
            Dim Grafico As Graphics = Label1.CreateGraphics()
            Dim Formato As New StringFormat(StringFormatFlags.LineLimit)
    
            Label1.BackColor = Color.Yellow
            Label1.AutoSize = False
            Label1.Size = New Size(204, 24)
            Label1.Text = "En la linea de abajo se debe ver lo mismo que en el Label."
            Label1.Font = New Font("Microsoft Sans Serif", 10)
    
            Grafico.MeasureString(Label1.Text, Label1.Font, Label1.Size, Formato, nPosicion, nLineas)
            Grafico.Dispose()
            Dim cTextoVisible = Label1.Text.Substring(0, nPosicion - 4)
    
            MessageBox.Show("Original ==> " & Label1.Text & Chr(13) & "Visible ==> " & "|" & cTextoVisible & "|")
        End Sub
    End Class

    Sí, pero si cambio la cadena no funciona. No en todas las cadenas sobran cuatro caracteres... es tema de sincronización de las unidades. Descubrí que si no le cambio el tamaño de la fuente funciona bien. De todos modos gracias por la respuesta.
    martes, 18 de agosto de 2020 4:04
  • Para que funcione con cualquier cadena solo tienes que crear unas variables una que tome la cantidad de letras que tiene la cadena completa y otra que tome la cantidad de letras que quieres que se muestre entonces en una condicion le dices que si el numero de la cadena tal es mayor que la cadena que quieres que se muestre que le reste lo que sobra entonces en esta parte del codigo le restas la cantidad que sobra

     Dim cTextoVisible = Label1.Text.Substring(0, nPosicion - 4) ' en ves del -4 que le reste lo sobrante 

    martes, 18 de agosto de 2020 16:45
  • Para que funcione con cualquier cadena solo tienes que crear unas variables una que tome la cantidad de letras que tiene la cadena completa y otra que tome la cantidad de letras que quieres que se muestre entonces en una condicion le dices que si el numero de la cadena tal es mayor que la cadena que quieres que se muestre que le reste lo que sobra entonces en esta parte del codigo le restas la cantidad que sobra

     Dim cTextoVisible = Label1.Text.Substring(0, nPosicion - 4) ' en ves del -4 que le reste lo sobrante 

    esta es una opcion pero si ya lo solucionaste me alegro mucho
    martes, 18 de agosto de 2020 16:48
  • Para que funcione con cualquier cadena solo tienes que crear unas variables una que tome la cantidad de letras que tiene la cadena completa y otra que tome la cantidad de letras que quieres que se muestre entonces en una condicion le dices que si el numero de la cadena tal es mayor que la cadena que quieres que se muestre que le reste lo que sobra entonces en esta parte del codigo le restas la cantidad que sobra

     Dim cTextoVisible = Label1.Text.Substring(0, nPosicion - 4) ' en ves del -4 que le reste lo sobrante 

    esta es una opcion pero si ya lo solucionaste me alegro mucho

    "y otra que tome la cantidad de letras que quieres que se muestre"

    Pero yo no deseo mostrar una cadena de una determinada cantidad de letras, lo que yo deseo es obtener la cadena visible que el control Label muestra tal cual, sin importar la cantidad de caracteres que tenga.

    martes, 18 de agosto de 2020 17:23