几乎每个论坛都问过这个问题,包括here但在我能找到的任何地方都没有可接受的答案。我开始认为实际上没有解决方案,我只需要将我的代码包装在 try/catch block 中并向用户道歉并要求他们选择另一种字体。
我想显示一个 FontDialog
以便用户可以更改 Chart
上的字体,但是如果用户选择了非 TrueType 字体,那么一个异常(exception)是抛出。 GDI+ 只能处理 TrueType 字体。
如何从 FontDialog 中过滤不能与 GDI+ 一起使用的字体?
最佳答案
FontDialog 类已经这样做了,它使用带有 CF_TTONLY 选项的 ChooseFont() API 调用。这会强制对话框仅显示宣传为 TrueType 字体的字体。这些链接表明周围有一些字体可以欺骗对话框,直到今天才听说过。这使得它非常罕见但肯定并不意外,周围有很多垃圾字体和错误的元数据。
您无法采取任何措施来捕获异常,它是在内置于 .NET 框架中的回调函数中引发的。重写类是一种选择,但不是一个令人愉快的选择。卸载 troublemaker 字体当然是简单的解决方案。
关于C# 将 FontDialog 设置为仅显示 TrueType 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302454/