以下几点可能会有所帮助:
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
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
就这样。只需调整它即可满足您的要求。
这是一个快速演示:
祝你好运。