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





В статье MSDN под названием «Как: перечислить установленные шрифты» я нашел этот код:
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
// Get the array of FontFamily objects.
FontFamily[] fontFamilies = installedFontCollection.Families;
Вот одно из решений на 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
См. Также этот тот же вопрос, который приводит к этому коду:
private bool IsFontInstalled(string fontName) {
using (var testFont = new Font(fontName, 8)) {
return 0 == string.Compare(
fontName,
testFont.Name,
StringComparison.InvariantCultureIgnoreCase);
}
}
Arial Bold Italic вряд ли будет шрифтом. Это подкласс семейства Arial.
Постарайтесь не усложнять и протестируйте «Arial».
Поскольку Font является IDisposable, не забывайте вызывать Dispose, когда он больше не используется.