VB.NET:如何在运行时组合并将字体应用于标签?

时间:2009-08-29 09:48:32

标签: .net vb.net visual-studio-2008 fonts label

我正在使用Visual Studio 2008在Visual Basic .NET中开发Windows窗体应用程序。

我正在尝试根据用户偏好在运行时编写字体(系列名称,字体大小和样式),并将它们应用于标签。

为了简化用户界面,以及需要使用相同字体的多台机器之间的兼容性,我 NOT 使用 InstalledFontCollection ,但一组按钮,用于设置几个选定的字体,我知道它们存在于所有机器中(Verdana等字体)。

所以,我必须在一个可以创建字体的模块上创建一个Public Sub,但我不知道如何编写它。还有四个CheckBoxes可以设置样式,Bold,Italic,Underline和Strikeout。

我该如何编码呢? SomeLabel.Font.Bold 属性是只读的,将“Times New Roman”这样的字符串转换为FontFamily类型似乎存在问题。 (它只是说不能这样做)

喜欢上

Dim NewFontFamily As FontFamily = "Times New Roman"

提前致谢。

1 个答案:

答案 0 :(得分:9)

这应解决您的字体问题:

Label1.Font = New Drawing.Font("Times New Roman", _
                               16,  _
                               FontStyle.Bold or FontStyle.Italic)

MSDN documentation on Font property here

创建此字体的函数的可能实现可能如下所示:

Public Function CreateFont(ByVal fontName As String, _
                           ByVal fontSize As Integer, _
                           ByVal isBold As Boolean, _
                           ByVal isItalic As Boolean, _
                           ByVal isStrikeout As Boolean) As Drawing.Font

    Dim styles As FontStyle = FontStyle.Regular

    If (isBold) Then
        styles = styles Or FontStyle.Bold
    End If

    If (isItalic) Then
        styles = styles Or FontStyle.Italic
    End If

    If (isStrikeout) Then
        styles = styles Or FontStyle.Strikeout
    End If

    Dim newFont As New Drawing.Font(fontName, fontSize, styles)
    Return newFont

End Function

字体是不可变的,这意味着一旦创建它们就无法更新。因此,您注意到的所有只读属性。