用可用字体列表填充 ComboBox

Posted

技术标签:

【中文标题】用可用字体列表填充 ComboBox【英文标题】:Fill ComboBox with List of available Fonts 【发布时间】:2011-03-26 11:04:22 【问题描述】:

如何用系统中所有可用字体的列表填充组合框?

【问题讨论】:

请看看这些例子 (java2s.com/Code/CSharp/GUI-Windows-Form/…, (java2s.com/Code/CSharp/GUI-Windows-Form/Fontlist.htm)(http://…. @thelost 链接已不存在 【参考方案1】:

请记住,所有内容都来自“System.Drawing”

foreach (System.Drawing.FontFamily font in System.Drawing.FontFamily.Families)

    comboBox1.Items.Add(font.Name);

【讨论】:

【参考方案2】:

使用已安装的字体集合类:

http://msdn.microsoft.com/en-us/library/system.drawing.text.installedfontcollection.aspx

这是 Zach Johnson 的另一种等效方法。

List<string> fonts = new List<string>();
InstalledFontCollection installedFonts = new InstalledFontCollection();          
foreach (FontFamily font in installedFonts.Families)
               
    fonts.Add(font.Name);

【讨论】:

【参考方案3】:

这是最简单的方法。它包括两个组合框 1 用于字体名称和一个用于字体大小

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

【讨论】:

【参考方案4】:
ComboBox1.ItemsSource = new InstalledFontCollection().Families;

第一次选择项目:

private void Combo1_Loaded(object sender, RoutedEventArgs e)

    ComboBox1.Text = "Tahoma";

【讨论】:

【参考方案5】:

你可以像这样绑定:

ItemsSource="Binding Source=x:Static Fonts.SystemFontFamilies"

【讨论】:

【参考方案6】:

不知道为什么我们需要在这里foreach

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

【讨论】:

我想知道。但是既然它是一个可枚举的,那么foreach 还不需要吗?或者是否有类似python 的生成器的 C# 语法? IList&lt;string&gt; fontNames = FontFamily.Families.Select(f =&gt; f.Name).ToList(); ComboBox 不接受IEnumerable【参考方案7】:

您可以使用System.Drawing.FontFamily.Families 获取可用的字体。

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

【讨论】:

我安装了蒙特塞拉特字体。此代码未列出 Montserrat 字体,但 Microsoft Word 会列出,控制面板外观和可视化也列出了字体。那么有什么问题呢?字体下载地址为fontsquirrel.com/fonts/montserrat 我明白了。此代码仅列出 TrueType 字体,请参阅此修复 ***.com/questions/329225/…

以上是关于用可用字体列表填充 ComboBox的主要内容,如果未能解决你的问题,请参考以下文章

WPF 格式化文本:计算字体大小以填充可用高度空间

用随机列表中的 2 个值填充 2D 数组(2048 游戏)

css(字体,文本,边距,边框,阴影,背景,渐变,多重背景,列表)

如何在android中检索可用/已安装字体的列表?

将字体真棒跨度图标放置在锚点内的文本上方

CSS 字体