Usar fonts personalizadas en una etiqueta en Winforms

Tengo una etiqueta en mi Winform y quiero usar una fuente personalizada llamada XCalibur para que parezca más shiny.

Si utilizo una fuente personalizada en una etiqueta y luego construyo la solución y luego .ZIP los archivos en \ bin \ Release ¿verá el usuario final las tags con mi aplicación personalizada que utilicé independientemente de si tienen esa fuente instalada o no?

Si este no es el caso, ¿cuál es la forma correcta de usar Custom Fonts en Labels.Text?

Incruste la fuente como recurso (o simplemente AddFontFile en el directorio bin) y luego use PrivateFontCollection para cargar la fuente (consulte las funciones AddFontFile y AddMemoryFont ). A continuación, utiliza la fuente normalmente como si estuviera instalada en la máquina.

La clase PrivateFontCollection permite a las aplicaciones instalar una versión privada de una fuente existente sin el requisito de reemplazar la versión del sistema de la fuente. Por ejemplo, GDI + puede crear una versión privada de la fuente Arial además de la fuente Arial que usa el sistema. PrivateFontCollection también se puede utilizar para instalar fonts que no existen en el sistema operativo.

Fuente

¡Después de ver posiblemente entre 30 y 50 publicaciones sobre esto, finalmente he podido encontrar una solución que realmente funciona! Por favor, siga los pasos secuencialmente:

1.) Incluya su archivo de fuente (en mi caso, archivo ttf) en los recursos de su aplicación. Para hacer esto, haga doble clic en el archivo ” Resources.resx “.

enter image description here

2.) Resalta la opción “Agregar recurso” y haz clic en la flecha hacia abajo. Seleccione la opción “Agregar archivo existente”. Ahora, busque su archivo de fuente, selecciónelo y haga clic en Aceptar. Guarde el archivo “Resources.resx”.

enter image description here

3.) Cree una función (por ejemplo, InitCustomLabelFont ()) y agregue el siguiente código en ella.

  //Create your private font collection object. PrivateFontCollection pfc = new PrivateFontCollection(); //Select your font from the resources. //My font here is "Digireu.ttf" int fontLength = Properties.Resources.Digireu.Length; // create a buffer to read in to byte[] fontdata = Properties.Resources.Digireu; // create an unsafe memory block for the font data System.IntPtr data = Marshal.AllocCoTaskMem(fontLength); // copy the bytes to the unsafe memory block Marshal.Copy(fontdata, 0, data, fontLength); // pass the font to the font collection pfc.AddMemoryFont(data, fontLength); 

Su fuente personalizada ahora se ha agregado a PrivateFontCollection.

4.) Luego, asigne la fuente a su Etiqueta y agregue un texto predeterminado en ella.

  //After that we can create font and assign font to label label1.Font = new Font(pfc.Families[0], label1.Font.Size); label1.Text = "My new font"; 

5.) Vaya a su diseño de formulario y seleccione su etiqueta. Haga clic derecho y seleccione ” Propiedades “. Busque la propiedad ” UseCompatibleTextRendering ” y establézcala en ” True “.

6.) Si es necesario, puede liberar la fuente después de estar seguro de que nunca podrá volver a usarse. Llame al método PrivateFontCollection.Dispose () , luego también puede llamar a Marshal.FreeCoTaskMem (data) de forma segura. Es bastante común no molestarse y dejar la fuente cargada durante la vida útil de la aplicación.

7.) Ejecuta tu aplicación. Ahora verá que su fuente personalizada se ha establecido para la etiqueta dada.

¡Aclamaciones!

Creo que la solución es insertar la fuente deseada en tu aplicación.

Pruebe este enlace:

http://www.emoreau.com/Entries/Articles/2007/10/Embedding-a-font-into-an-application.aspx

Agregue la fuente que quiere usar.

enter image description here

`

  PrivateFontCollection modernFont = new PrivateFontCollection(); modernFont.AddFontFile("Font.otf"); label.Font = new Font(modernFont.Families[0], 40);` 

Hice un método también.

  void UseCustomFont(string name, int size, Label label) { PrivateFontCollection modernFont = new PrivateFontCollection(); modernFont.AddFontFile(name); label.Font = new Font(modernFont.Families[0], size); } 

enter image description here