在几乎每个论坛中都提出了这个问题,包括 这里 但是我可以找到任何可以接受的答案。我开始认为实际上没有解决方案,我只需要将代码包装在尝试/捕获块中,并向用户道歉,并要求他们选择其他字体。

我想展示 FontDialog 因此用户可以更改一个字体 Chart, 但是,如果用户选择非truetype字体,则会引发异常。 GDI+只能处理truetype字体。

如何从无法与GDI+一起使用的Fontdialog过滤字体?

有帮助吗?

解决方案

Fontdialog类已经做到这一点,它将使用CF_TTONLY选项使用peacteFont()API调用。这迫使对话框仅显示将自己宣传为trueType字体的字体。这些链接表明,周围有字体,愚弄了对话,直到今天之前才听说过。这使它非常罕见,但肯定不是出乎意料的,周围有很多垃圾字体。

您无能为力来捕获异常,它是在烤入.NET框架中的回调功能中提出的。重写课程是一种选择,但不是一个令人愉快的选择。卸载麻烦制造商的字体无疑是简单的解决方案。

其他提示

除了尝试/抓住它,没有真正的好方法

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);
}

我不确定它是否会起作用,但请尝试设置 fontdialog错误的.

您可以使用可用的自定义fontdialog 这里 克服这个例外。它是在c#.net中开发的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top