2017-02-16 36 views
-1

enter image description here的WinForm不使用字體嵌入資源

嵌入資源字體不上的控件正常工作正常工作。

但它可以被Graphics對象使用繪製的東西。


  1. 首先,嵌入式資源添加fontawesome-webfont.ttf字體文件。

  2. 然後,從程序集資源中獲取字體。

  3. 接下來,將font屬性分配給控件。

代碼在這裏:

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; 
      } 
     } 
    } 
} 
+0

你可以發佈此表單的相關代碼嗎?並解釋到底哪些工作不正常? –

回答