使用不同的字体设置每个列表视图条目
本文关键字:列表 视图 设置 字体 | 更新日期: 2023-09-27 18:31:53
我正在尝试开发一个字体应用程序。在列表视图中,我列出了所有已安装的字体。现在我想显示用该字体书写的字体名称。
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);
该列表按预期交替字体。
这里可能有什么问题?某些字体是否可能未定义或无法使用,导致整个列表失败?不会引发任何错误。
谢谢。
构造函数
new Font(FontFamily fontFamily, Float fontSize);
自动将字体样式设置为"常规"。但是,并非所有字体实际上都支持常规样式。
通过检查 FontStyle 枚举器可以获得更好的结果:
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;
不是很好的代码。之后,我的机器上安装的大多数字体(许多自定义字体)都可以正常工作。唯一不符合所有这些样式的是"银翼杀手电影字体粗斜体",一种默认字体。
但是,我们实际上可以修复它!然后我们希望没有其他字体对它的样式更残暴。else-block被替换为:
else try {
familyList[i].Font = new Font(fontFamilies[i], 12, FontStyle.Bold | FontStyle.Italic);
} catch {
familyList[i].BackColor = Color.Red;
}
繁荣,所有字体都正确显示!之所以使用 try-catch,是因为我们无法提前检查这是否有效。如果出现问题,捕获块仍将发出可见警告。信用 https://stackoverflow.com/a/5350706/2532489
与我在字体文件夹中安装的字体交叉检查显示,某些字体明显丢失。
到目前为止,我还没有找到一个令人满意的解决方案来获取所有字体,找到至少一种可能的样式,甚至是已安装字体的所有样式。似乎不存在可能采用字符串参数(超、压缩、黑色、浅色、窄等)的构造函数。
https://stackoverflow.com/a/4662434/2532489 可能会有所帮助,但目前我不能肯定地说。