首页 文章

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

提问于
浏览
5

我正在使用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 回答

  • 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
    

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

相关问题