Avez-vous déjà vu une exception comme celle-ci?
System.ArgumentException: Only TrueType fonts are supported. This is not a TrueType font.
at System.Drawing.Font.FromLogFont(Object lf, IntPtr hdc)
at System.Windows.Forms.FontDialog.UpdateFont(LOGFONT lf)
at System.Windows.Forms.FontDialog.RunDialog(IntPtr hWndOwner)
at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner)
Cette exception est lancée lors de l'utilisation du composant System.Windows.Forms.FontDialog et vous sélectionnez une police non valide. Et vous ne pouvez rien faire, car cette exception est enterrée dans une méthode privée du FontDialog et n'est pas manipulée.
Comme le bogue est là depuis des années sans être corrigé, et étant donné que les formulaires Windows ne sont pas exactement élevés sur la liste des priorités pour Microsoft, je soupçonne qu'elle ne sera jamais corrigée. C'est une roue que je préférerais ne pas réinventer, mais ... le voici de toute façon.
Je n'ai pas réussi à trouver une police qui provoque ce type de crash, bien que j'ai pas mal de rapports d'erreur automatisés des utilisateurs qui en font l'expérience. Si vous connaissez une telle police disponible en téléchargement, faites-le moi savoir afin que je puisse le tester moi-même. Je suppose que ma version résout le problème, mais à ce stade, je ne sais pas vraiment.
Le composant Cyotek.Windows.Forms.FontDialog est une baisse de remplacement du System.Windows.Forms.FontDialog d'origine.windows.forms.fontDialog, mais sans le crash qui se produit lors de la sélection d'une police de type non de true.
Cette version utilise la boîte de dialogue Win32 native via ChooseFont - La procédure de crochet pour gérer l'événement Apply et la cachette du Color ComboBox a été prélevée directement dans le composant géré d'origine.
Il y a aussi une solution entièrement gérée enterrée dans l'une des branches de ce référentiel. Il est incomplet, principalement parce que je n'ai pas pu déterminer quelles polices sont cachées par les paramètres et comment combiner les familles avec des styles non standard tels que la lumière. Il est toujours intéressant en soi, montrant comment utiliser EnumFontFamiliesEx , etc., mais pour l'instant il est suspendu en tant que travail en cours.
Un package NuGet est disponible.
PM> Install-Package Cyotek.windows.forms.fontdialog
Le composant FontDialog est concédé sous licence MIT. Voir LICENSE.txt pour le texte intégral.
Pour plus d'informations sur ce contrôle, consultez les articles étiquetés avec FontDialog sur Cyotek.com.