WinForms开发中设置控件字体能否实现下拉选择功能?
问题结论与解决方案
- 首先明确:.NET没有内置和
Color类类似的系统字体枚举,默认写代码时无法直接获得字体名的智能提示下拉。原因是系统可用字体是动态变化的,每台设备安装的字体都不相同,无法像固定色值一样预设枚举项。 - 你可以通过
System.Drawing.Text.InstalledFontCollection类获取当前设备所有可用字体,无需手动硬编码字体名,示例代码如下:
' 获取所有已安装字体族 Dim installedFonts As New System.Drawing.Text.InstalledFontCollection() Dim allFonts As FontFamily() = installedFonts.Families ' 找到Calibri字体后直接赋值,避免手动输入字体名写错 Dim calibriFont = allFonts.FirstOrDefault(Function(f) f.Name.Equals("Calibri", StringComparison.OrdinalIgnoreCase)) If calibriFont IsNot Nothing Then b.Font = New Font(calibriFont, 20) End If
- 如果你想要实现类似
Color.Red的代码智能提示效果,可以自己封装常用字体的静态类,示例实现:
' 自定义常用字体静态类 Public NotInheritable Class CommonFonts Private Shared ReadOnly _installedFonts As New System.Drawing.Text.InstalledFontCollection() Public Shared ReadOnly Property Calibri As FontFamily Get Return _installedFonts.Families.FirstOrDefault(Function(f) f.Name = NameOf(Calibri)) End Get End Property Public Shared ReadOnly Property Arial As FontFamily Get Return _installedFonts.Families.FirstOrDefault(Function(f) f.Name = NameOf(Arial)) End Get End Property ' 按需添加其他常用字体即可 End Class
调用方式和Color完全一致,输入CommonFonts.时IDE就会弹出预定义的字体选项:
b.Font = New Font(CommonFonts.Calibri, 20)
- 如果是运行时需要给用户提供字体选择下拉框,直接把字体列表绑定到下拉控件即可:
' 绑定字体列表到ComboBox cboFontList.DataSource = _installedFonts.Families.Select(Function(f) f.Name).ToList() ' 选中后赋值 b.Font = New Font(cboFontList.SelectedValue.ToString(), 20)
内容的提问来源于stack exchange,提问作者Sougata
相关产品推荐
相关产品推荐

