VB.NET: Как составить и применить шрифт к метке во время выполнения? - PullRequest
6 голосов
/ 29 августа 2009

Я занимаюсь разработкой приложения для Windows Forms в Visual Basic .NET с Visual Studio 2008.

Я пытаюсь составить шрифты (имя семейства, размер шрифта и стили) во время выполнения, основываясь на пользовательских настройках, и применить их к меткам.

Ради более простого пользовательского интерфейса и совместимости между несколькими машинами, требующими использования одного и того же шрифта, я НЕ буду использовать InstalledFontCollection , но набор кнопок, которые будут устанавливать несколько выбранных шрифтов, которые, как я знаю, присутствуют на всех машинах (шрифты, такие как Verdana).

Итак, я должен сделать Public Sub на модуле, который будет создавать шрифты, но я не знаю, как это кодировать. Есть также четыре флажка, которые устанавливают стили: полужирный, курсив, подчеркивание и зачеркивание.

Как мне это написать? Свойство SomeLabel.Font.Bold доступно только для чтения, и возникает проблема при преобразовании строки типа «Times New Roman» в тип FontFamily. (Он просто говорит, что не мог этого сделать)

Как и на

Dim NewFontFamily As FontFamily = "Times New Roman"

Заранее спасибо.

1 Ответ

10 голосов
/ 29 августа 2009

Это должно решить проблему со шрифтом:

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

Документация MSDN по свойству Font здесь

Возможная реализация функции, которая создает этот шрифт, может выглядеть следующим образом:

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

Шрифты являются неизменяемыми, то есть после их создания они не могут быть обновлены. Поэтому все свойства только для чтения, которые вы заметили.

...