2010-08-06 28 views
31

Sistemdeki tüm kullanılabilir yazı tiplerinin bir listesiyle birlikte açılan kutuyu nasıl doldurabilirim?ComboBox'ı Kullanılabilir Yazı Tipleri Listesi ile doldur

+0

bu örneklere bir göz (http://www.java2s.com/Code/CSharp/GUI-Windows-Form/Loadallsysteminstalledfonts Lütfen yazı tipi boyutu için iki yazı adı için comboboxes 1 ve birini içerir .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 bağlantı mevcut değil –

cevap

52

Kullanılabilir fontları almak için System.Drawing.FontFamily.Families kullanabilirsiniz.

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

Montserrat yazı tipini yükledim. Bu kod, Montserrat yazı tiplerini listelemez, ancak Microsoft Word yapar ve Denetim Masası Görünüm ve Görselleştirme yazı tipini de listeler. Peki yanlış olan ne? Yazı tipinin URl'sini indirin https://www.fontsquirrel.com/fonts/montserrat – qub1n

+1

Anladım. Bu kod sadece TrueType yazı tiplerini listeler, bu düzeltmeyi http://stackoverflow.com/questions/329225/fonts-missing-in-winforms-fontdialog – qub1n

6

burada foreach gerekiyor niçin Emin değilim.

ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" 
+0

merak ettim. Ama sonra bu bir numaralandırılabilir, çünkü hala gerekli bir "foreach" değil mi? Ya da python'un jeneratörü gibi bir şey için C# sözdizimi var mı? – Jamie

+1

'IList fontNames = FontFamily.Families.Select (f => f.Name) .ToList();' ComboBox, 'IEnumerable' kabul etmiyor. –

-1

Sadece böyle bağlayabilir

private void Combo1_Loaded(object sender, RoutedEventArgs e) 
{ 
    ComboBox1.Text = "Tahoma"; 
} 
0
ComboBox1.ItemsSource = new InstalledFontCollection().Families; 

ve ilk kez seçilen öğenin:

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

Bu bunu yapmak için kolay bir yoldur. Bu

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