C#将FontDialog设置为仅显示TrueType字体

时间:2011-06-10 05:46:38

标签: c# fonts gdi+ mschart true-type-fonts

几乎每个论坛都会提出这个问题,包括here,但在我能找到的任何地方都没有可接受的答案。我开始认为实际上没有解决方案,我只需将我的代码包装在try / catch块中,并向用户道歉并要求他们选择另一种字体。

我想显示FontDialog以便用户可以更改Chart上的字体,但是如果用户选择非TrueType字体,则会抛出异常。 GDI +只能处理TrueType字体。

如何过滤FontDialog中不能与GDI +一起使用的字体?

4 个答案:

答案 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开发的。