如何在不创建新字体的情况下更改字体样式?
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
这是输出:
我正在尝试做一些可能非常简单的事情,但我尝试的一切似乎都不起作用。
我正在制作一个 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
这是输出: