una sintomas saber reparacion probar poder fuente esta enciende dañada comprobar como chequear atx alimentacion .net windows fonts

.net - sintomas - Prueba si una fuente está instalada



fuente no enciende (6)

¿Hay una manera fácil (en .Net) de probar si hay una fuente instalada en la máquina actual?


Saliendo de la respuesta de GvS:

private static bool IsFontInstalled(string fontName) { using (var testFont = new Font(fontName, 8)) return fontName.Equals(testFont.Name, StringComparison.InvariantCultureIgnoreCase); }


string fontName = "Consolas"; float fontSize = 12; using ( Font fontTester = new Font( fontName, fontSize, FontStyle.Regular, GraphicsUnit.Pixel ) ) { if ( fontTester.Name == fontName ) { // Font exists } else { // Font doesn''t exist } }


Otras respuestas propuestas con Creación de Font solo funcionan si FontStyle.Regular está disponible. Algunas fuentes, por ejemplo, Verlag Bold, no tienen un estilo regular. La creación fallaría con la excepción. La fuente ''Verlag Bold'' no es compatible con el estilo ''Regular'' . Deberá verificar los estilos que su aplicación requerirá. Una solución sigue:

public static bool IsFontInstalled(string fontName) { bool installed = IsFontInstalled(fontName, FontStyle.Regular); if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Bold); } if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Italic); } return installed; } public static bool IsFontInstalled(string fontName, FontStyle style) { bool installed = false; const float emSize = 8.0f; try { using (var testFont = new Font(fontName, emSize, style)) { installed = (0 == string.Compare(fontName, testFont.Name, StringComparison.InvariantCultureIgnoreCase)); } } catch { } return installed; }


Gracias a Jeff, será mejor que lea la documentación de la clase Font:

Si el parámetro familyName especifica una fuente que no está instalada en la máquina que ejecuta la aplicación o no es compatible, se sustituirá a Microsoft Sans Serif.

El resultado de este conocimiento:

private bool IsFontInstalled(string fontName) { using (var testFont = new Font(fontName, 8)) { return 0 == string.Compare( fontName, testFont.Name, StringComparison.InvariantCultureIgnoreCase); } }


Así es como lo haría:

private static bool IsFontInstalled(string name) { using (InstalledFontCollection fontsCollection = new InstalledFontCollection()) { return fontsCollection.Families .Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase)); } }

Una cosa a tener en cuenta con esto es que la propiedad Name no siempre es lo que esperaría al buscar en C: / WINDOWS / Fonts. Por ejemplo, tengo una fuente instalada llamada "Arabic Typsetting Regular". IsFontInstalled("Arabic Typesetting Regular") devolverá false, pero IsFontInstalled("Arabic Typesetting") devolverá true. ("Tipografía árabe" es el nombre de la fuente en la herramienta de vista previa de fuentes de Windows).

En cuanto a los recursos, realicé una prueba en la que llamé a este método varias veces, y la prueba finalizó en solo unos pocos milisegundos cada vez. Mi máquina está un poco sobrecargada, pero a menos que necesites ejecutar esta consulta con mucha frecuencia, parece que el rendimiento es muy bueno (e incluso si lo hiciste, para eso sirve el almacenamiento en caché).