C # Réglage FontDialog pour afficher uniquement les polices TrueType
-
25-10-2019 - |
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 +?
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 .