Вот несколько моментов, которые могут помочь:
- Чтобы заполнить поля со списком:
cmbFont.DataSource = New InstalledFontCollection().Families
cmbFont.DisplayMember = "Name"
For i As Integer = 8 To 72 Step 2
cmbFontSize.Items.Add(i)
Next
'Assuming the target control is a TextBox:
cmbFont.SelectedIndex = cmbFont.Items.IndexOf(TextBox1.Font.FontFamily)
cmbFontSize.Text = TextBox1.Font.Size.ToString
- Создайте подпрограмму, чтобы изменить шрифт, который будетВызывается из вызванных событий полей со списком:
Private Sub SetFont()
If cmbFont.SelectedItem Is Nothing OrElse String.IsNullOrEmpty(cmbFontSize.Text) Then
Return
End If
Dim fnt As FontFamily = DirectCast(cmbFont.SelectedItem, FontFamily)
Dim fntSize As Single = Convert.ToSingle(cmbFontSize.Text)
Dim fntStyle As FontStyle
For Each fs As FontStyle In [Enum].GetValues(GetType(FontStyle))
If fnt.IsStyleAvailable(fs) Then
fntStyle = fs
Exit For
End If
Next
TextBox1.Font = New Font(fnt, fntSize, fntStyle)
End Sub
Обратите внимание, что вам также необходимо проверить FontStyle вновь выбранного шрифта, является ли обычный стиль (я вижу в вашем коде, что вы предпочитаетеобычный стиль) доступен. Если нет, будет выбран первый доступный стиль.
- Обработка события SelectedIndexChanged шрифтов:
Private Sub cmbFont_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFont.SelectedIndexChanged
SetFont()
End Sub
- Я думаю, что лучше обрабатывать событие TextChangedполя со списком размеров, чтобы пользователь мог ввести не перечисленное значение, например 11, 13 .. и т. д .:
Private Sub cmbFontSize_TextChanged(sender As Object, e As EventArgs) Handles cmbFontSize.TextChanged
SetFont()
End Sub
Если вам также необходимо связать поля со списком с помощью текстового редактора для отображенияшрифт выделения всякий раз, когда выбор изменяется, тогда вы можете сделать:
- Добавить переменную класса и назвать ее, скажем;
Private IsSelectionChanged As Boolean = False
Это будет использоваться дляизбегайте избыточностей.
- Добавьте подпрограмму, чтобы получить шрифт из выделения:
Private Sub GetFont()
IsSelectionChanged = True
Dim fnt As Font = If(txtEditor.SelectionFont, txtEditor.Font)
cmbFont.SelectedIndex = cmbFont.Items.IndexOf(fnt.FontFamily)
cmbFontSize.Text = fnt.Size.ToString
IsSelectionChanged = False
End Sub
- Измените первую строку в подпрограмме SetFont следующим образом:
Private Sub SetFont()
If IsSelectionChanged OrElse cmbFont.SelectedItem Is Nothing OrElse String.IsNullOrEmpty(cmbFontSize.Text) Then
Return
End If
'
'
'The rest as the above mentioned...
End Sub
- В выделенном вами измененном событии редактор:
Private Sub txtEditor_SelectionChanged(sender As Object, e As EventArgs) Handles txtEditor.SelectionChanged
GetFont()
End Sub
Вот и все. Просто настройте его в соответствии с вашими требованиями.
Вот короткая демонстрация:
Удачи.