2017-02-16 4 views
-1

enter image description hereWinForm nicht richtig mit Schriften arbeiten eingebettete Ressourcen

Die eingebettete Ressource Schrift nicht richtig auf die Kontrollen funktioniert.

Aber es kann von Graphics Objekt etwas verwendet werden.


  1. Zuerst fügen fontawesome-webfont.ttf Font-Datei mit eingebetteten Ressource.

  2. Dann Schriftart von Assembly-Ressourcen abrufen.

  3. Ordnen Sie als nächstes die Font-Eigenschaft dem Steuerelement zu.

-Code hier:

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

Können Sie den relevanten Code für dieses Formular posten? Und genau erklären, was nicht richtig funktioniert? –

Antwort

Verwandte Themen