¿Alguna vez has visto una excepción como esta?
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)
Esta excepción se lanza cuando se usa el componente System.Windows.Forms.FontDialog y selecciona una fuente no válida. Y no puede hacer nada al respecto, ya que esta excepción está enterrada en un método privado del FontDialog y no se maneja.
Como el error ha estado allí durante años sin ser solucionado, y dado el hecho de que los formularios de Windows no son exactamente altos en la lista de prioridades para Microsoft, sospecho que nunca se solucionará. Esta es una rueda que preferiría no reinventar, pero ... aquí está de todos modos.
En realidad, no he logrado encontrar una fuente que cause este tipo de bloqueo, aunque tengo bastantes informes de errores automatizados de los usuarios que la experimentan. Si conoce una fuente de este tipo que está disponible para descargar, hágamelo saber para que pueda probar esto yo mismo. Supongo que mi versión soluciona el problema, pero en este punto no lo sé con certeza.
El componente Cyotek.Windows.Forms.FontDialog es un reemplazo de caída para el System.Windows.Forms.FontDialog original.windows.forms.fontdialog, pero sin el bloqueo que ocurre al seleccionar una fuente de tipo no true.
Esta versión utiliza el cuadro de diálogo Win32 nativo a través de ChooseFont : el procedimiento de gancho para manejar el evento Apply y ocultar el color Combobox se ha tomado directamente del componente administrado original.
También hay una solución completamente administrada enterrada en una de las ramas de este repositorio. Está incompleto, principalmente porque no pude determinar qué fuentes están ocultas por configuraciones y cómo combinar familias con estilos no estándar como la luz. Todavía es interesante por derecho propio, mostrando cómo usar EnumFontFamiliesEx etc., pero por ahora está en espera como un trabajo en progreso.
Un paquete Nuget está disponible.
PM> Install-Package cyotek.windows.forms.fontdialog
El componente FontDialog tiene licencia bajo la licencia MIT. Vea LICENSE.txt para el texto completo.
Para obtener más información sobre este control, consulte los artículos etiquetados con Fontdialog en cyotek.com.