Question

Cette question a été posée dans pratiquement tous les forum, y compris ici mais il n'y a pas de réponses acceptables partout que je peux trouver. Je commence à penser qu'il n'y a effectivement pas de solution et je dois juste envelopper mon code dans un bloc try / catch et présenter des excuses à l'utilisateur et leur demander de choisir une autre police.

Je veux montrer un FontDialog de sorte qu'un utilisateur peut modifier les polices sur un Chart, si l'utilisateur sélectionne une des polices non-TrueType, une exception est levée. GDI + ne peut gérer les polices TrueType.

Comment puis-je filtrer les polices du FontDialog qui ne peut pas être utilisé avec GDI +?

Était-ce utile?

La solution

La classe FontDialog fait déjà, il utilise l'appel API ChooseFont () avec l'option CF_TTONLY. Quelles forces la boîte de dialogue de polices d'affichage uniquement qui s'annoncent que les polices TrueType. Les liens suggère qu'il existe des polices autour de cet imbécile la boîte de dialogue, jamais entendu parler avant jusqu'à aujourd'hui. Ce qui le rend tout à fait rare, mais certainement pas inattendu, il y a beaucoup de polices indésirables dans de mauvaises métadonnées.

Il n'y a rien que vous pouvez faire pour attraper l'exception, il est élevé dans une fonction de rappel qui est cuit dans le framework .NET. Réécriture la classe est une option, mais pas agréable. Désinstallation la police fauteur de troubles est certainement la solution facile.

Autres conseils

pas de véritable moyen de bien autour de celui-ci, sauf pour essayer / bloc catch it

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

Je ne suis pas sûr que cela fonctionnera, mais essayez de définir FontDialog.AllowSimulations false .

Vous pouvez utiliser la FontDialog personnalisée disponible pour surmonter cette exception. Il est développé en C # .Net.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top