VB.NET: Как составить и применить шрифт к метке во время выполнения?

Я разрабатываю приложение 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"

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

29.08.2009 09:48:31
1 ОТВЕТ
РЕШЕНИЕ

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

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

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

12
9.07.2019 08:07:46
И на всякий случай это может помочь другим, и я использовал ту же информацию из предыдущего шрифта, чтобы сделать следующий, за исключением значения, которое я хотел изменить. По моему мнению, было бы проще, если бы VB.NET просто выполнял все повторяющиеся операции кодирования, когда я просил изменить одно свойство, но это уже довольно просто, поэтому лучше не жаловаться! = P
Camilo Martin 29.08.2009 11:43:53