You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms中如何使用常规和粗体以外的字体字重?

在C# WinForms中使用SF Mono的Light/Medium/Heavy字重

问题原因

System.Drawing.FontStyle枚举仅提供Regular、Bold、Italic等有限样式,无法直接指定Medium/Light/Heavy这类字重。直接手动输入不存在的FontStyle值会导致运行时自动 fallback 到默认字体(Microsoft Sans Serif)。

解决方法

方法1:直接使用带字重的字体名称

多数多字重字体的不同变体(如Medium/Light/Heavy)会以独立字体名称存在于系统中,直接指定完整名称即可:

// 使用SF Mono Medium
this.richTextBox1.Font = new System.Drawing.Font("SF Mono Medium", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

// 使用SF Mono Light
this.richTextBox1.Font = new System.Drawing.Font("SF Mono Light", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

// 使用SF Mono Heavy
this.richTextBox1.Font = new System.Drawing.Font("SF Mono Heavy", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

注意:需确保系统已安装完整的SF Mono字体包,包含对应字重的变体。

方法2:通过PrivateFontCollection加载本地字体文件(未安装字体时)

如果字体未安装在系统中,可以直接加载本地字体文件:

using System.Drawing.Text;

// 初始化私有字体集合
PrivateFontCollection privateFonts = new PrivateFontCollection();
// 添加对应字重的字体文件路径
privateFonts.AddFontFile(@"C:\YourFontPath\SF-Mono-Medium.otf");

// 从集合中获取字体家族并创建Font对象
FontFamily sfMonoMedium = privateFonts.Families[0];
this.richTextBox1.Font = new System.Drawing.Font(sfMonoMedium, 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

验证字体是否可用

可以通过以下代码检查系统中是否存在目标字体变体:

bool isFontAvailable = FontFamily.Families.Any(f => f.Name.Equals("SF Mono Medium", StringComparison.OrdinalIgnoreCase));

内容的提问来源于stack exchange,提问作者HeavyGoat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:22:14