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

7

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

我试图在运行时根据用户偏好组合字体(字体家族名称,字体大小和样式),并将其应用于标签。

为了简化用户界面,并确保在需要使用相同字体的多台机器之间兼容性,我将不会使用InstalledFontCollection,而是使用一组按钮来设置少量已知的字体(如Verdana等)。

因此,我必须在模块上创建一个公共子程序,以创建字体,但我不知道如何编写代码。还有四个复选框,用于设置加粗、斜体、下划线和删除线样式。

我应该如何编写代码呢?SomeLabel.Font.Bold属性是只读的,当将类似于“Times New Roman”这样的字符串转换为FontFamily类型时似乎存在问题。(它只是说无法执行)

就像这样:

Dim NewFontFamily As FontFamily = "Times New Roman"

提前感谢您。

1个回答

13

以下代码应该能解决你的字体问题:

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

关于 Font 属性的 MSDN 文档在此处

创建该字体的函数可能的实现方式如下:

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

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


以防有所帮助,我所做的是使用上一个字体的信息制作下一个字体,除了我想要更改的值之外。在我看来,如果VB.NET在我请求更改单个属性时执行所有重复的编码,那会更容易,但已经很容易了,所以我最好不要抱怨!=P - Camilo Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接