2010-08-06 40 views
31

¿Cómo puedo llenar un cuadro combinado con una lista de todas las fuentes disponibles en el sistema?Rellenar ComboBox con lista de fuentes disponibles

+0

Por favor, echar un vistazo a estos ejemplos (http://www.java2s.com/Code/CSharp/GUI-Windows-Form/Loadallsysteminstalledfonts .htm) (http://www.java2s.com/Code/CSharp/GUI-Windows-Form/Loadallsysteminstalledfonts.htm), (http://www.java2s.com/Code/CSharp/GUI-Windows-Form/ Fontlist.htm) (http://www.java2s.com/Code/CSharp/GUI-Windows-Form/Fontlist.htm). – thelost

+0

@thelost el enlace ya no existe –

Respuesta

52

Puede utilizar System.Drawing.FontFamily.Families para obtener las fuentes disponibles.

List<string> fonts = new List<string>(); 

foreach (FontFamily font in System.Drawing.FontFamily.Families) 
{ 
    fonts.Add(font.Name); 
} 

// add the fonts to your ComboBox here 
+0

Instalé la fuente Montserrat. Este código no muestra las fuentes de Montserrat, pero sí lo hace Microsoft Word y Apariencia y visualización del panel de control también enumera la fuente. Entonces, ¿qué está mal? Descargar URl de la fuente es https://www.fontsquirrel.com/fonts/montserrat – qub1n

+1

Lo tengo. Este código enumera solo las fuentes TrueType, consulte esta revisión http://stackoverflow.com/questions/329225/fonts-missing-in-winforms-fontdialog – qub1n

6

No sé por qué tenemos que foreach aquí.

IList<string> fontNames = FontFamily.Families.Select(f => f.Name).ToList(); 
+0

Me lo pregunté. Pero como es enumerable, ¿no es necesario un "foreach"? ¿O hay una sintaxis de C# para algo como el generador de 'python'? – Jamie

+1

'IList fontNames = FontFamily.Families.Select (f => f.Name) .ToList();' ComboBox no acepta 'IEnumerable'. –

-1

Usted puede simplemente enlazar así:

ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" 
0
ComboBox1.ItemsSource = new InstalledFontCollection().Families; 

y por primera vez el elemento seleccionado:

private void Combo1_Loaded(object sender, RoutedEventArgs e) 
{ 
    ComboBox1.Text = "Tahoma"; 
} 
1

Ésta es la manera fácil de hacerlo. Incluye dos cuadros combinados 1 para el nombre de la fuente y otro para el tamaño de la fuente

public FontFamily[] Families { get; } 


private void Form1_Load(object sender, EventArgs e) 
    { 

     foreach (FontFamily oneFontFamily in FontFamily.Families) 
     { 
      comboBox1.Items.Add(oneFontFamily.Name); 
     } 

     comboBox1.Text = this.richTextBox1.Font.Name.ToString(); 
     comboBox2.Text = this.richTextBox1.Font.Size.ToString(); 

     richTextBox1.Focus(); 

    } 

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     float size = Convert.ToSingle(((ComboBox)sender).Text); 

     richTextBox1.SelectionFont = new Font(richTextBox1.Font.FontFamily, size); 
    } 
Cuestiones relacionadas