You need to enable JavaScript to run this app. WinForms开发中设置控件字体能否实现下拉选择功能?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 20:18:04