Lo primero que haremos sera agregar una nueva clase a nuestro proyecto en CSharp con el nombre FontComboBox y heredamos de la clase ComboBox lo siguiente por hacer es rellenar el control con el listado de fuentes del sistema.
Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.ComponentModel;
namespace CustomControl
{
internal class FontComboBox : ComboBox
{
Pen p = new Pen(Color.Black);
StringFormat sf = new StringFormat();
Font f = new Font("Arial", 8);
internal FontComboBox()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
sf.Trimming = StringTrimming.None;
sf.FormatFlags = StringFormatFlags.NoWrap;
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
ListFonts();
this.DropDownHeight = 300;
this.Font = new Font(this.Font.Name, 12);
this.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.AutoCompleteSource = AutoCompleteSource.ListItems;
this.MaxDropDownItems = 20;
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
try
{
FontFamily ff = new FontFamily(this.Items[e.Index].ToString());
if (ff.IsStyleAvailable(FontStyle.Regular) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Regular);
}
else if (ff.IsStyleAvailable(FontStyle.Italic) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Italic);
}
else if (ff.IsStyleAvailable(FontStyle.Bold) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
else
{
f = new Font("Microsoft Sans Serif", this.Font.Size, FontStyle.Regular);
}
}
catch (Exception)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
p = new Pen(this.ForeColor);
e.DrawBackground();
e.Graphics.DrawString(this.Items[e.Index].ToString(), f, p.Brush, e.Bounds);
if (e.State == DrawItemState.Focus)
e.DrawFocusRectangle();
//Liberamos la memoria
p.Dispose();
f.Dispose();
}
private void ListFonts()
{
this.Items.Clear();
System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection();
this.BeginUpdate();
foreach (FontFamily ff in ifc.Families)
{
this.Items.Add(ff.Name);
}
this.EndUpdate();
}
}
}
He agregado el código y un par de personalizaciones visible como auto-completado.
No hay comentarios:
Publicar un comentario