WinForms.FontDialog中缺少字体。

3
当我在C#,.NET 2.0中显示WinForms.FontDialog实例时,我缺少一些我希望出现的字体(例如Courier、Fixedsys、MS Sans Serif)。同时,客户抱怨他安装的Adobe字体也没有出现在列表中。
请问如何让这些字体在对话框中显示?
1个回答

6

FontDialog被设计为仅显示TrueType字体,以保持与GDI+的兼容性。如果想要显示设备字体,则需要进行一些Reflection hacking:

using System.Reflection;

...

FontDialog fontDialog1 = new FontDialog();

MethodInfo mi = typeof(FontDialog).GetMethod("SetOption", 
    BindingFlags.NonPublic | BindingFlags.Instance);
        mi.Invoke(fontDialog1, new object[] { 0x40000, false });
fontDialog1.ShowDialog();

我不知道这是否还支持Adobe的OpenType字体,我没有任何相关的经验。请告诉我们。


这不会引发“非有效字体异常”吗?因为GDI+仅支持TrueType字体。 - techno
当然,期望是原帖作者会对它们做其他事情。 - Hans Passant
有没有覆盖方法,使字体对话框只显示有效的TrueType字体? - techno
FontDialog was designed to only show TrueType fonts to stay compatible with GDI+ - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接