如何在不创建新字体的情况下更改字体样式?

How to change the fontstyle without creating a new font?

我正在尝试做一些可能非常简单的事情,但我尝试的一切似乎都不起作用。

我正在制作一个 windows 表单应用程序,它可以让您使用各种不同的字体来预览一些自定义文本。

我想做的是在选中复选框时将标签的字体样式更改为斜体。同时保留当前字体。

“Display”是我的标签名称。 "Italicscb" 是复选框的名称。

下面是我目前使用的代码:

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

这很好用,但它需要我输入一个新的字体名称。我不想要的。我试图为当前字体分配一个变量并将其插入,但这给了我一个错误。

    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
End Sub

我也试过在各个字体选项按钮中加入 if then 循环。 没有错误,但当我选中该框时没有任何反应。

  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

如果有人能指出我做错了什么。我真的很感激。 顺便说一句,我正在为我的工作做这个。

谢谢。

Image of my userform

首先,使用.Checked代替.CheckState,这样可以避免做很多不必要的检查:

If Italicscb.Checked Then
    'Italic
Else
    'Not italic
End If

现在,如果您只想更改 Display 的 fontStyle(使用现有的字体名称和大小),您可以使用构造函数 Font(Font, FontStyle) 创建一个新的 Font,因此您的代码将是:

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

也可以用优雅的单行获得相同的结果:

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

这是输出: