none
Problema al incluir Fonts en PictureBox RRS feed

  • Pregunta

  • Buenos días, la verdad soy muy novato con la programación, veréis estoy haciendo una pequeña aplicación para imprimir cartelería para la tienda, y hasta ahí todo bien, el problema viene cuando he intentado modificar la fuente de texto, cuando cargo los datos en el PictureBox, el texto me aparece subrayado y tachado, por mas que he rebuscado no he visto o mejor dicho, no se buscar la solución consultando Google ya que no he encontrado nada parecido.

    Este es el trozo de código que me esta desesperando, porque no descubro como quitarle el tachado y subrayado que me muestra al mismo:

                Dim privateFonts As New System.Drawing.Text.PrivateFontCollection()
    
                privateFonts.AddFontFile("fonts/AliciaWonderland_1.ttf")
                Dim font As New System.Drawing.Font(privateFonts.Families(0), ComboBox1.Text)
                Labeltext1.Font = font 
    
                g.DrawString(TextBox1.Text, New Font(Labeltext1.Font, ComboBox1.Text), Brushes.Orange, New RectangleF(0, bmp.Height / 2 - 350, bmp.Width, bmp.Height), drawFormat)

    El ComboBox lo utilizo para el tamaño, LabelText1 para el tamaño del texto, en oculto para que no se vea y no rompa el diseño del TextBox que es donde introduzco el texto a insertar en el PictureBox.

    Si pudierais darme una orientación o consejo, os lo agracedería enormemente :)

    Muchas gracias, un saludo


    viernes, 20 de septiembre de 2019 5:58

Todas las respuestas

  • Casi seguro que el problema es que VB te está haciendo una conversión implícita que no es la que tú esperabas. Comentas que "eres muy novato en programación". Según adquieras experiencia, acabarás descubriendo que aunque las conversiones implícitas del VB simplifican mucho el código, acaban generando tantos problemas difíciles de resolver que al final acaba siendo preferible activar el "Option Strict" para que el compilador rechace estas conversiones y escribirlas a mano, con lo que siempre sabes qué es lo que conviertes en lugar de confiar en que con un poco de suerte el VB acierte con la conversión correcta.

    En este caso concreto, estás llamando a New Font y pasándole en el constructor un Font y un String. Sin embargo, examina la lista de sobrecargas del constructor de Font:

    https://docs.microsoft.com/en-us/dotnet/api/system.drawing.font.-ctor?view=netframework-4.8

    Verás que ninguno de ellos admite (Font, String). Entonces VB intenta tomar el String que le has pasado y convertir ese texto a alguno de los parámetros admitidos por el constructor, que en este caso será el "FontStyle". Al tomar el texto (que seguramente es un número) y convertirlo en en FontStyle (que es un enum), salen una serie de bits en el enum que dan lugar a los efectos que estás viendo (subrayado, tachado, etc.).

    Conclusión: Fíjate siempre en el tipo de dato y conviértelo expresamente, no dejes que VB lo haga por ti. Examina en la lista cuál es el constructor al que quieres llamar, y convierte los argumentos a los tipos que necesite (usa CType o Convert según proceda).

    viernes, 20 de septiembre de 2019 6:26
  • Buenas noches, muchas gracias por la aclaración.

    Investigare lo que me comentas :)

    Un saludo

    viernes, 20 de septiembre de 2019 23:27
  • Bueno ya estoy por aquí de nuevo jejeje
    Pero esta vez para indicar que ya solucione el problema y ya me aparecen los textos sin tachado y sin subrayado, muchas gracias Alberto por orientarme, no veas que alegría mas grande cuando vi que se soluciono cambiando un par de lineas.

    Por si es necesario, pueden dar el tema como resuelto.

    Un saludo y de nuevo muchas gracias.

    domingo, 22 de septiembre de 2019 6:51