es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo cambiar el estilo de fuente sin crear una nueva fuente?

Estoy tratando de hacer algo que probablemente sea increíblemente simple, pero todo lo que intento no parece funcionar.

Estoy haciendo una aplicación de Windows Forms que simplemente te permite previsualizar un texto personalizado usando un puñado de fuentes diferentes.

Lo que estoy tratando de hacer es cambiar el estilo de fuente de la etiqueta a cursiva cuando la casilla de verificación esté marcada, manteniendo la fuente actual que tiene.

“Display” es el nombre de mi etiqueta. “Italicscb” es el nombre de la casilla de verificación.

A continuación se muestra el código que estoy utilizando actualmente:

Private Sub Italicscb_CheckedChanged(sender As Object, e As EventArgs) Handles Italicscb.CheckedChanged
    If Italicscb.CheckState = CheckState.Checked Then
        Display.Font = New Font("Arial", 60, FontStyle.Italic)
    Else
        If Italicscb.CheckState = CheckState.Unchecked Then
            Display.Font = New Font("Arial", 60, FontStyle.Bold)
        End If
    End If
End Sub

Esto funciona bien, pero requiere que ingrese un nuevo nombre de fuente, lo cual no quiero hacer. He intentado asignar la fuente actual a una variable y usar esa variable, pero me da un error.

Dim CF As Font
CF = Display.Font

If Italicscb.CheckState = CheckState.Checked Then
    Display.Font = New Font(CF, 60, FontStyle.Italic)
Else
    If Italicscb.CheckState = CheckState.Unchecked Then
        Display.Font = New Font(CF, 60, FontStyle.Bold)
    End If
End If

También he intentado poner un ciclo if en los botones de opciones individuales de fuente. No hay errores, pero no sucede nada cuando marco la casilla.

If Italicscb.CheckState = CheckState.Checked Then
    Display.Font = New Font("Freehand521 BT", 60, FontStyle.Italic)
Else
    Display.Font = New Font("Freehand521 BT", 60, FontStyle.Bold)
End If

Si alguien pudiera señalar qué estoy haciendo mal, lo agradecería mucho. Por cierto, estoy haciendo esto para mi trabajo.

Gracias.

Imagen de mi formulario de usuario

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás teniendo es con el constructor New Font(). El constructor que estás utilizando toma tres argumentos: nombre de la fuente, tamaño de la fuente y estilo de la fuente. Cuando intentas asignar la fuente actual a una variable y pasarla al constructor, estás pasando solo un argumento (la fuente en sí) en lugar de tres, lo cual está causando un error.

    Para solucionar esto, puedes utilizar la propiedad FontStyle de la fuente actual en lugar de crear un nuevo objeto de fuente. Aquí tienes una versión actualizada de tu código que debería funcionar:

    Private Sub Italicscb_CheckedChanged(sender As Object, e As EventArgs) Handles Italicscb.CheckedChanged
        If Italicscb.CheckState = CheckState.Checked Then
            Display.Font = New Font(Display.Font, FontStyle.Italic)
        Else
            Display.Font = New Font(Display.Font, FontStyle.Bold)
        End If
    End Sub
    

    Este código crea una nueva fuente con la misma familia de fuentes, tamaño y color que la fuente actual, pero con el estilo de fuente especificado. Luego asigna esta nueva fuente a la etiqueta Display. ¡Espero que esto te ayude!

Comments are closed.