几乎每个论坛都会提出这个问题,包括here,但在我能找到的任何地方都没有可接受的答案。我开始认为实际上没有解决方案,我只需将我的代码包装在try / catch块中,并向用户道歉并要求他们选择另一种字体。
我想显示FontDialog
以便用户可以更改Chart
上的字体,但是如果用户选择非TrueType字体,则会抛出异常。 GDI +只能处理TrueType字体。
如何过滤FontDialog中不能与GDI +一起使用的字体?
答案 0 :(得分:5)
FontDialog类已经执行此操作,它使用带有CF_TTONLY选项的ChooseFont()API调用。这迫使对话框仅显示将自己宣传为TrueType字体的字体。这些链接表明这个对话框周围有字体,直到今天才从未听说过。这使得它非常罕见,但肯定不会出乎意料,有很多垃圾字体存在错误的元数据。
没有任何东西可以捕获异常,它是在回归函数中引发的,该函数已经被嵌入到.NET框架中。重写课程是一种选择,但不是一个令人愉快的选择。卸载troublemaker字体肯定是一个简单的解决方案。
答案 1 :(得分:1)
除了尝试/捕捉阻止它之外没有真正好的方法
try
{
if (m_FontDialog.ShowDialog(frmMain.mainForm) == DialogResult.OK)
{
//Successful
}
}
catch (Exception ex)
{
//Not a truetype font
MessageBox.Show(frmMain.mainForm, ex.Message + Environment.NewLine + "Font not changed.", "Font Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
答案 2 :(得分:0)
我不确定它是否有效,但请尝试将FontDialog.AllowSimulations设置为 false 。
答案 3 :(得分:0)
您可以使用可用的自定义FontDialog here来克服此异常。它是用C#.Net开发的。