我想从我的资源文件夹中添加或部署超过10种外部字体的应用程序。我已经经历了各种SO问题,但除了这个SO answer之外,它们都不符合我的要求。
现在我在winform应用程序中实现了同样的功能,我想将这些字体添加到组合框中,其样式如下所示。
欢迎任何建议。
答案 0 :(得分:0)
如果您想在下拉列表中以适当的字体显示项目,则必须自己在ComboBox
中绘制项目。这并不难,下面的代码至少可以做到:
var comboBox = new ComboBox();
comboBox.DisplayMember = "Name";
comboBox.Items.AddRange(FontFamily.Families);
comboBox.DrawMode = DrawMode.OwnerDrawFixed;
comboBox.DrawItem += (s, e) => {
var fontFamily = (FontFamily) comboBox.Items[e.Index];
var itemText = comboBox.GetItemText(fontFamily);
// Some fonts don't work with a regular style, if they don't have a
// regular style, we'll default to the provided font.
if (!fontFamily.IsStyleAvailable(FontStyle.Regular))
{
TextRenderer.DrawText(
e.Graphics, itemText, e.Font, e.Bounds, e.ForeColor, e.BackColor
TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
}
else
{
using (var font = new Font(fontFamily, comboBox.Font.Size, FontStyle.Regular))
{
TextRenderer.DrawText(
e.Graphics, itemText, font, e.Bounds, e.ForeColor, e.BackColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
}
}
};
此实现通过回退到FontFamily
的默认字体来处理ComboBox
没有常规字体样式。在创建字体之前尝试查找FontFamily
的有效样式,可以更优雅地处理此问题。