我正在尝试开发一个字体应用程序。在ListView中,我列出了所有已安装的字体。现在我想显示用该字体书写的字体名称。
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
fontFamilies = installedFontCollection.Families;
int fontCount = fontFamilies.Length;
familyList = new ListViewItem[fontCount];
for (int i = 0; i < fontCount; i++)
{
familyList[i] = new ListViewItem(fontFamilies[i].Name);
}
listView1.Items.AddRange(familyList);
在for循环中,我尝试使用
设置字体familyList[i].Font = new Font(fontFamilies[i], 12);
但是,所有文字都是空白的。
如果我对值进行硬编码,则可以正常工作。即使我根据随机条件对不同字体进行硬编码,也就是说
if (i % 2 == 0)
familyList[i].Font = new Font(fontFamilies[53], 12);
else
familyList[i].Font = new Font(fontFamilies[12], 12);
列表按预期交替显示字体。
这可能是什么问题?某些字体是否未定义或无法使用,使整个列表失败?没有错误。
感谢。
答案 0 :(得分:0)
构造函数
new Font(FontFamily fontFamily, Float fontSize);
自动将字体样式设置为&#34;常规&#34;。但是,并非所有字体都支持常规样式。
通过检查FontStyle-enumerator:
可以获得更好的结果if (fontFamilies[i].IsStyleAvailable(FontStyle.Regular)) familyList[i].Font = new Font(fontFamilies[i], 12);
else if (fontFamilies[i].IsStyleAvailable(FontStyle.Bold)) familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Bold);
else if (fontFamilies[i].IsStyleAvailable(FontStyle.Italic)) familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Italic);
else if (fontFamilies[i].IsStyleAvailable(FontStyle.Strikeout)) familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Strikeout);
else if (fontFamilies[i].IsStyleAvailable(FontStyle.Underline)) familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Underline);
else familyList[i].BackColor = Color.Red;
不完全非常好的代码。之后,我的机器上安装的大多数字体(许多自定义字体)都能正常工作。唯一一个失败所有这些风格的是&#34; Blade Runner Movie Font Bold Italic&#34;,一个默认字体。
然而,我们实际上可以解决它!然后我们希望没有其他字体对它的风格更加残酷。 else块被替换为:
else try {
familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Bold | FontStyle.Italic);
} catch {
familyList[i].BackColor = Color.Red;
}
繁荣,所有字体都正确显示!使用Try-catch是因为我们无法提前检查是否可以开始使用。如果出现问题,catch-block仍会发出明显的警告。归功于https://stackoverflow.com/a/5350706/2532489
在字体文件夹中使用我安装的字体进行交叉检查表明某些字体缺失。
到目前为止,我还没有找到一个令人满意的解决方案来获取所有字体,找到至少一种可能的样式甚至是已安装字体的所有样式。没有可能为字体样式采用字符串参数(Ultra,Condensed,Black,Light,Narrow ....)的构造函数似乎存在。
https://stackoverflow.com/a/4662434/2532489可能会有所帮助,但目前我无法肯定地说出来。