使用不同的字体设置每个ListViewEntry

时间:2014-11-24 10:32:04

标签: c# fonts

我正在尝试开发一个字体应用程序。在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);

列表按预期交替显示字体。

这可能是什么问题?某些字体是否未定义或无法使用,使整个列表失败?没有错误。

感谢。

1 个答案:

答案 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可能会有所帮助,但目前我无法肯定地说出来。

相关问题