Как убедиться, что шрифт существует, прежде чем использовать его с .NET - PullRequest
2 голосов
/ 20 сентября 2008

У меня есть проект VB.NET для Windows Forms, который в какой-то момент рисует текст прямо в форму во время выполнения. Прежде чем рисовать шрифтом, я хочу убедиться, что шрифт и размер шрифта существуют на компьютере пользователя. Если этого не произойдет, я попробую несколько других похожих шрифтов, в конечном итоге по умолчанию с Arial или что-то еще.

Как лучше всего проверить и проверить шрифт на компьютере пользователя?

Ответы [ 4 ]

8 голосов
/ 20 сентября 2008

Из статьи MSDN под заголовком «Как: перечислить установленные шрифты» я нашел этот код:



InstalledFontCollection installedFontCollection = new InstalledFontCollection();

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


2 голосов
/ 20 сентября 2008

Вот одно решение в 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
1 голос
/ 31 октября 2008

См. Также этот тот же вопрос , который приводит к этому коду:

    private bool IsFontInstalled(string fontName) {
        using (var testFont = new Font(fontName, 8)) {
            return 0 == string.Compare(
              fontName,
              testFont.Name,
              StringComparison.InvariantCultureIgnoreCase);
        }
    }
0 голосов
/ 06 октября 2010

Arial Bold Italic вряд ли будет шрифтом. Это подкласс семьи Arial.

Постарайтесь сохранить простоту и проверьте на «Arial».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...