Pregunta

Esta pregunta se ha hecho en prácticamente todos los forros, incluido aquí Pero no hay respuestas aceptables en ningún lugar que pueda encontrar. Estoy empezando a pensar que en realidad no hay solución y solo tengo que envolver mi código en un bloque de prueba/captura y disculparme con el usuario y pedirles que elijan otra fuente.

Quiero mostrar un FontDialog para que un usuario pueda cambiar las fuentes en un Chart, sin embargo, si el usuario selecciona una fuente que no es TRUETYPE, entonces se lanza una excepción. GDI+ solo puede manejar las fuentes TrueType.

¿Cómo puedo filtrar las fuentes del fontdialog que no se puede usar con GDI+?

¿Fue útil?

Solución

La clase FontDialog ya hace esto, utiliza la llamada API ChoiceFont () con la opción CF_TTONLY. Que obliga al diálogo a mostrar solo fuentes que se anuncian a sí mismas como fuentes TrueType. Los enlaces sugieren que hay fuentes alrededor de que tonta el diálogo, nunca antes escuchado de él hasta hoy. Lo que lo hace bastante raro pero ciertamente no inesperado, hay muchas fuentes basura con malos metadatos.

No hay nada que pueda hacer para detectar la excepción, se eleva en una función de devolución de llamada que se hornea en el marco .NET. Reescribir la clase es una opción pero no agradable. Desinstalar la fuente de alboroto es sin duda la solución fácil.

Otros consejos

No hay una manera realmente agradable en este

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

No estoy seguro de si funcionará, pero intente establecer Fontdialog. a falso.

Puede usar el fontdialog personalizado disponible aquí para superar esta excepción. Se desarrolla en C#.NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top