Reading Fonts for Windows

What is the best way to read all Windows fonts in ComboBox? Basically, I tried to do this:

equal to Microsoft Word

I can do:

string[] fonts = Directory.GetFiles(@"C:\windows\fonts"); 

and show each file in a ComboBox, but is that right? Don't have a component that does the job?

Thanks in advance.

+7
source share
4 answers

Try the following:

 using System.Drawing.Text; InstalledFontCollection myFonts = new InstalledFontCollection(); foreach (FontFamily ff in myFonts.Families) comboBox1.Items.Add(ff.Name); } 
+5
source

Check out EnumFontFamiliesEx and EnumFonts Strike>

Far better is InstalledFontCollection . I did not know that it exists.

+7
source

There are some .FON fonts in the Font folder. C # does not work with this BITMAP font - you cannot display these fonts using the drawstring function. To get all the fonts you can show, just use this code that I found here: http://www.java2s.com/Code/CSharp/GUI-Windows-Form/Getallsysteminstalledfont.htm

  using System; using System.Drawing; using System.Drawing.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class Test{ static void Main() { InstalledFontCollection fonts = new InstalledFontCollection(); for(int i = 0; i < fonts.Families.Length; i++) { Console.WriteLine(fonts.Families[i].Name); } } } 
+4
source

You can create a custom control that automatically downloads installed Windows fonts:

 namespace MyProject { public class FontComboBox : ComboBox { public FontComboBox() { MaxDropDownItems = 20; IntegralHeight = false; Sorted = false; DropDownStyle = ComboBoxStyle.DropDownList; DrawMode = DrawMode.OwnerDrawVariable; } public void Populate(bool b) { both = b; foreach (FontFamily ff in FontFamily.Families) { if(ff.IsStyleAvailable(FontStyle.Regular)) Items.Add(ff.Name); } if(Items.Count > 0) SelectedIndex=0; //ttimg = new Bitmap(GetType(),"ttfbmp.bmp"); ttimg = new Bitmap(Resources.ttfbmp); } protected override void OnMeasureItem(System.Windows.Forms.MeasureItemEventArgs e) { if(e.Index > -1) { int w = 0; string fontstring = Items[e.Index].ToString(); Graphics g = CreateGraphics(); e.ItemHeight = (int)g.MeasureString(fontstring, new Font(fontstring,10)).Height; w = (int)g.MeasureString(fontstring, new Font(fontstring,10)).Width; if(both) { int h1 = (int)g.MeasureString(samplestr, new Font(fontstring,10)).Height; int h2 = (int)g.MeasureString(Items[e.Index].ToString(), new Font("Arial",10)).Height; int w1 = (int)g.MeasureString(samplestr, new Font(fontstring,10)).Width; int w2 = (int)g.MeasureString(Items[e.Index].ToString(), new Font("Arial",10)).Width; if(h1 > h2 ) h2 = h1; e.ItemHeight = h2; w = w1 + w2; } w += ttimg.Width*2; if(w > maxwid) maxwid=w; if(e.ItemHeight > 20) e.ItemHeight = 20; } base.OnMeasureItem(e); } protected override void OnDrawItem(System.Windows.Forms.DrawItemEventArgs e) { if(e.Index > -1) { string fontstring = Items[e.Index].ToString(); nfont = new Font(fontstring,10); Font afont = new Font("Arial",10); if(both) { Graphics g = CreateGraphics(); int w = (int)g.MeasureString(fontstring, afont).Width; if((e.State & DrawItemState.Focus)==0) { e.Graphics.FillRectangle(new SolidBrush(SystemColors.Window), e.Bounds.X+ttimg.Width,e.Bounds.Y,e.Bounds.Width,e.Bounds.Height); e.Graphics.DrawString(fontstring,afont,new SolidBrush(SystemColors.WindowText), e.Bounds.X+ttimg.Width*2,e.Bounds.Y); e.Graphics.DrawString(samplestr,nfont,new SolidBrush(SystemColors.WindowText), e.Bounds.X+w+ttimg.Width*2,e.Bounds.Y); } else { e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds.X+ttimg.Width,e.Bounds.Y,e.Bounds.Width,e.Bounds.Height); e.Graphics.DrawString(fontstring,afont,new SolidBrush(SystemColors.HighlightText), e.Bounds.X+ttimg.Width*2,e.Bounds.Y); e.Graphics.DrawString(samplestr,nfont,new SolidBrush(SystemColors.HighlightText), e.Bounds.X+w+ttimg.Width*2,e.Bounds.Y); } } else { if((e.State & DrawItemState.Focus)==0) { e.Graphics.FillRectangle(new SolidBrush(SystemColors.Window), e.Bounds.X+ttimg.Width,e.Bounds.Y,e.Bounds.Width,e.Bounds.Height); e.Graphics.DrawString(fontstring,nfont,new SolidBrush(SystemColors.WindowText), e.Bounds.X+ttimg.Width*2,e.Bounds.Y); } else { e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds.X+ttimg.Width,e.Bounds.Y,e.Bounds.Width,e.Bounds.Height); e.Graphics.DrawString(fontstring,nfont,new SolidBrush(SystemColors.HighlightText), e.Bounds.X+ttimg.Width*2,e.Bounds.Y); } } e.Graphics.DrawImage(ttimg, new Point(e.Bounds.X, e.Bounds.Y)); } base.OnDrawItem(e); } Font nfont; bool both = false; int maxwid = 0; string samplestr = " - " + Resources.AppTitle; Image ttimg; protected override void OnDropDown(System.EventArgs e) { this.DropDownWidth = maxwid+30; } } } 
0
source

All Articles