用可用字体列表填充 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<string> fontNames = FontFamily.Families.Select(f => 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的主要内容,如果未能解决你的问题,请参考以下文章