在我的winform应用程序中添加多个外部字体

时间:2015-03-27 19:45:09

标签: c# vb.net winforms fonts external

我想从我的资源文件夹中添加或部署超过10种外部字体的应用程序。我已经经历了各种SO问题,但除了这个SO answer之外,它们都不符合我的要求。

现在我在winform应用程序中实现了同样的功能,我想将这些字体添加到组合框中,其样式如下所示。

enter image description here

欢迎任何建议。

1 个答案:

答案 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的有效样式,可以更优雅地处理此问题。