Lilypie Primer PicLilypie Primer Ticker

lunes, 16 de julio de 2007

Un ComboBox que muestra los Fonts instalados en el equipo

En este post compartiré con ustedes una sencilla forma de implementar un ComboBox (o un ListBox) que muestra los tipos de letra que tenemos instalados en el equipo, asi:

Vamos directo al código. Primero necesitamos crear en nuestro Form un campo privado que almacenará los tipos de letra instalados en el equipo y servirá como DataSource de nuestro ComboBox.

private InstalledFontCollection installedFonts = new InstalledFontCollection();

A continuación debemos configurar las Propiedades DataSource y DisplayMember del ComboBox, haremos esto en el constructor del Form, asi:

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = installedFonts.Families;
comboBox1.DisplayMember =
"Name";
comboBox1.DrawMode =
DrawMode.OwnerDrawFixed;
}

También hemos fijado la Propiedad DrawMode a OwnerDrawFixed, algo que también podríamos haber hecho usando el diseñador gráfico.

Finalmente la verdadera acción tiene lugar en el evento DrawItem del Combo, que implementamos así:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
FontFamily family = installedFonts.Families[e.Index];
FontStyle style = FontStyle.Regular;
if (!family.IsStyleAvailable(style))
style = FontStyle.Bold;
if (!family.IsStyleAvailable(style))
style = FontStyle.Italic;
Font fnt = new Font(family, 10, style);
Brush brush;
if (e.State == DrawItemState.Selected)
{
brush = new SolidBrush(Color.White);
}
else
{
brush = new SolidBrush(comboBox1.ForeColor);
}


e.DrawBackground();

e.Graphics.DrawString(family.GetName(0),
fnt, brush, e.Bounds.Location);

}

Quizás las líneas en que vamos modificando la variable style merezcan una explicación. Ocurre que no todos los Fonts soportan todos los estilos, así que si no nos aseguramos de que el Font que vamos a utilizar soporte un determinado estilo terminaremos obteniendo una linda Excepción.

Eso es todo, ya tenemos un ComboBox que muestra como lucen nuestras fuentes, haciendo que nuestras aplicaciones sean un poquito más amigables.

2 comentarios:

Anónimo dijo...

Muchas gracias por el ejemplo. Yo estoy aprendiendo C# por mi cuenta ya que no tengo dinero ni trabajo..esto me viene muy bien.

Gracias Nuevamente

Unknown dijo...

Bueno es código, gracias por su aporte