-1

enter image description here

The embedded resource font is not working properly on the controls.

But it can is used by Graphics object draw something.


  1. First, add fontawesome-webfont.ttf font file with embedded resource.

  2. Then, get font from assembly resources.

  3. Next, assign the font property to the control.

Code here:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Sample
{
    public partial class FormSample : Form
    {
        PrivateFontCollection pfc;
        Font font ;

        public FormSample()
        {
            InitializeComponent();
            pfc = LoadFontFromResource("Sample.assets.fontawesome-webfont.ttf");
            font = new Font(pfc.Families[0], 16, FontStyle.Regular);
            this.textBoxControl1.Text = "\uf028 fontawesome";
            this.label1.Text = "\uf028 fontawesome";
            this.label1.ForeColor = Color.Green;
            this.textBoxControl1.ForeColor = Color.Green;
            this.label1.Font = font;
            this.textBoxControl1.Font = font;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.label1.Font = font;
            this.textBoxControl1.Font = font;

            Graphics g = this.CreateGraphics();

            g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
            g.InterpolationMode = InterpolationMode.HighQualityBilinear;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.SmoothingMode = SmoothingMode.HighQuality;

            g.DrawString("\uf028 fontawesome(GDI+)", font, new SolidBrush(Color.Green), new Point(this.label1.Location.X+10, 80));
            g.Dispose();
        }

        /// <summary>
        /// Loads the font from resource.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns>PrivateFontCollection.</returns>
        public static PrivateFontCollection LoadFontFromResource(string name)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();

            Assembly assembly = Assembly.GetExecutingAssembly();

            using (Stream stream = assembly.GetManifestResourceStream(name))
            {
                if (stream == null) return null;

                byte[] fontData = new byte[stream.Length];
                stream.Read(fontData, 0, (int)stream.Length);

                IntPtr ptr = Marshal.AllocHGlobal(fontData.Length);
                Marshal.Copy(fontData, 0, ptr, fontData.Length);

                pfc.AddMemoryFont(ptr, fontData.Length);

                return pfc;
            }
        }
    }
}
seay
  • 599
  • 5
  • 8
  • Can you post the relevant code for this form? And explain exactly what is not working correctly? – Dave S Feb 16 '17 at 13:19

1 Answers1

0

This is helpful:Embedded resource font in C# does not work correctly,thanks.

Community
  • 1
  • 1
seay
  • 599
  • 5
  • 8