2010-08-06 8 views
31

Comment remplir une liste déroulante avec une liste de toutes les polices disponibles dans le système?Remplir ComboBox avec Liste des polices disponibles

+0

S'il vous plaît jeter un oeil à ces exemples (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 le lien n'existe plus –

Répondre

52

Vous pouvez utiliser System.Drawing.FontFamily.Families pour obtenir les polices 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

J'ai installé la police Montserrat. Ce code ne répertorie pas les polices Montserrat, mais Microsoft Word le fait et l'apparence et la visualisation du panneau de configuration répertorient également la police. Alors qu'est-ce qui ne va pas? Télécharger URl de police est https://www.fontsquirrel.com/fonts/montserrat – qub1n

+1

Je l'ai eu. Ce code liste uniquement les polices TrueType, voir ce correctif http://stackoverflow.com/questions/329225/fonts-missing-in-winforms-fontdialog – qub1n

6

Vous ne savez pas pourquoi nous avons besoin de foreach ici.

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

Je me demandais. Mais puisque c'est une énumérable, n'est-il pas nécessaire de foreach? Ou y a-t-il une syntaxe C# pour quelque chose comme le générateur de 'python'? – Jamie

+1

'IList fontNames = FontFamily.Families.Select (f => f.Name) .ToList();' ComboBox n'accepte pas 'IEnumerable'. –

-1

Vous pouvez simplement lier comme ceci:

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

et pour la première fois l'élément sélectionné:

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

C'est le moyen facile de le faire. Il comprend deux comboboxes 1 pour le nom de la police et un pour la taille de la police

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); 
    } 
Questions connexes