如何在使用.NET之前确保字体存在

时间:2008-09-20 01:33:29

标签: .net vb.net winforms fonts

我有一个VB.NET Windows窗体项目,它在运行时一次将文本直接绘制到窗体上。在我使用字体绘制之前,我想确保用户机器上存在字体和字体大小。如果他们不这样做,我会尝试一些其他类似的字体,最终默认使用Arial或其他东西。

在用户计算机上测试和验证字体的最佳方法是什么?

4 个答案:

答案 0 :(得分:8)

在MSDN文章“如何:枚举已安装的字体”中,我找到了这段代码:



InstalledFontCollection installedFontCollection = new InstalledFontCollection();

// Get the array of FontFamily objects.
FontFamily[] fontFamilies = installedFontCollection.Families;


答案 1 :(得分:2)

这是一个解决方案,在c#中:

public partial class Form1 : Form
{
    public Form1()
    {
        SetFontFinal();
        InitializeComponent();
    }

    /// <summary>
    /// This method attempts to set the font in the form to Cambria, which
    /// will only work in some scenarios. If Cambria is not available, it will
    /// fall back to Times New Roman, so the font is good on almost all systems.
    /// </summary>
    private void SetFontFinal()
    {
        string fontName = "Cambria";
        Font testFont = new Font(fontName, 16.0f, FontStyle.Regular,
            GraphicsUnit.Pixel);

        if (testFont.Name == fontName)
        {
            // The font exists, so use it.
            this.Font = testFont;
        }
        else
        {
            // The font we tested doesn't exist, so fallback to Times.
            this.Font = new Font("Times New Roman", 16.0f,
                FontStyle.Regular, GraphicsUnit.Pixel);
        }
    }
}

这是VB中的一种方法:

Public Function FontExists(FontName As String) As Boolean

    Dim oFont As New StdFont
    Dim bAns As Boolean

    oFont.Name = FontName
    bAns = StrComp(FontName, oFont.Name, vbTextCompare) = 0
    FontExists = bAns

End Function

答案 2 :(得分:1)

另请参阅导致此代码的same question

    private bool IsFontInstalled(string fontName) {
        using (var testFont = new Font(fontName, 8)) {
            return 0 == string.Compare(
              fontName,
              testFont.Name,
              StringComparison.InvariantCultureIgnoreCase);
        }
    }

答案 3 :(得分:0)

Arial Bold Italic不太可能是一种字体。它是Arial家族的一个子类。

尝试保持简单并测试'Arial'。