C# Установка fontdialog только для отображения шрифтов TrueType

StackOverflow https://stackoverflow.com/questions/6302454

Вопрос

Этот вопрос был задан практически на каждом форуме, включая здесь Но нет приемлемых ответов нигде, которые я могу найти. Я начинаю думать, что на самом деле нет решения, и мне просто нужно обернуть свой код в блоке Try/Catch и извиниться перед пользователем и попросить их выбрать еще один шрифт.

Я хочу показать FontDialog так что пользователь может изменить шрифты на Chart, однако, если пользователь выбирает шрифт, не связанный с личиной, то исключение брошено. GDI+ может обрабатывать только шрифты TrueType.

Как я могу отфильтровать шрифты из Fontdialog, которые нельзя использовать с GDI+?

Это было полезно?

Решение

Класс Fontdialog уже делает это, он использует вызов API selectFont () с опцией CF_TTONLY. Который заставляет диалог отображать только шрифты, которые рекламируют себя как шрифты 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.allowsImulation к ЛОЖЬ.

Вы можете использовать пользовательский Fontdialog здесь Чтобы преодолеть это исключение. Он разработан в C#.net.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top