C # Настройка FontDialog для отображения только шрифтов TrueType - PullRequest
7 голосов
/ 10 июня 2011

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

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

Как отфильтровать шрифты из FontDialog, который нельзя использовать с GDI +?

Ответы [ 4 ]

5 голосов
/ 10 июня 2011

Класс FontDialog уже делает это, он использует API-вызов ChooseFont () с опцией CF_TTONLY. Что заставляет диалог отображать только те шрифты, которые рекламируют себя как шрифты TrueType. Ссылки предполагают, что вокруг этого дурака есть шрифты, о которых раньше никогда не слышали до сегодняшнего дня. Что делает его довольно редким, но, конечно, не неожиданным, вокруг немало нежелательных шрифтов с плохими метаданными.

Вы ничего не можете сделать, чтобы поймать исключение, оно вызывается функцией обратного вызова, встроенной в .NET Framework. Переписать класс - вариант, но не приятный. Удаление шрифта Troumaker, безусловно, является простым решением.

1 голос
/ 21 июля 2011

Нет ничего хорошего, кроме как попытаться / поймать блокировать его

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);
}
0 голосов
/ 27 ноября 2013

Вы можете использовать пользовательский FontDialog, доступный здесь для преодоления этого исключения Разработано в C # .Net.

0 голосов
/ 10 июня 2011

Я не уверен, будет ли это работать, но попробуйте установить FontDialog.AllowSimulations в false .

...