DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

インストールされているフォントを取得する

InstalledFontCollectionクラスを使用することにより、コンピュータにインストールされているフォントを列挙できます。InstalledFontCollectionクラスのFamiliesプロパティは、FontFamilyオブジェクトの配列となります。FontFamily(フォントファミリア)とは、「基本デザインが同様でスタイルが異なるタイプフェイスのグループ」(フォント ファミリとフォントの作成より)ということです。

次の例では、インストールされているすべてのフォントファミリアを取得し、その内スタイルにRegular(標準テキスト)が使用できるフォントの名前をそのフォントでピクチャボックスに表示しています。なお、「方法 : インストールされているフォントを列挙する」にも同じような例がありますので、そちらも参考にしてください。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'がソースファイルの一番上に書かれているものとする

'PictureBox1のGraphicsオブジェクトを取得
Dim g As Graphics = PictureBox1.CreateGraphics()

'InstalledFontCollectionオブジェクトの取得
Dim ifc As New System.Drawing.Text.InstalledFontCollection
'インストールされているすべてのフォントファミリアを取得
Dim ffs As FontFamily() = ifc.Families

Dim y As Integer = 0
Dim ff As FontFamily
For Each ff In ffs
    'ここではスタイルにRegularが使用できるフォントのみを表示
    If ff.IsStyleAvailable(FontStyle.Regular) Then
        'Fontオブジェクトを作成
        Dim fnt As New Font(ff, 8)
        'フォント名をそのフォントで描画する
        g.DrawString(fnt.Name, fnt, Brushes.Black, 0, y)
        '次の表示位置を計算
        y += CInt(fnt.GetHeight(g))
        'リソースを解放する
        fnt.Dispose()
    End If
Next ff

'リソースを解放する
g.Dispose()
C#
コードを隠すコードを選択
//using System.Drawing;
//がソースファイルの一番上に書かれているものとする

//PictureBox1のGraphicsオブジェクトを取得
Graphics g = PictureBox1.CreateGraphics();

//InstalledFontCollectionオブジェクトの取得
System.Drawing.Text.InstalledFontCollection ifc = 
    new System.Drawing.Text.InstalledFontCollection();
//インストールされているすべてのフォントファミリアを取得
FontFamily[] ffs = ifc.Families;

int y = 0;
foreach (FontFamily ff in ffs)
{
    //ここではスタイルにRegularが使用できるフォントのみを表示
    if (ff.IsStyleAvailable(FontStyle.Regular))
    {
        //Fontオブジェクトを作成
        Font fnt = new Font(ff, 8);
        //フォント名をそのフォントで描画する
        g.DrawString(fnt.Name, fnt, Brushes.Black, 0, y);
        //次の表示位置を計算
        y += (int) fnt.GetHeight(g);
        //リソースを解放する
        fnt.Dispose();
    }
}

//リソースを解放する
g.Dispose();

補足:FontStyle構造体には、次のようなメンバがあります。
FontStyle列挙体 説明
Bold 太字テキスト。
Italic 斜体テキスト。
Regular 標準テキスト。
Strikeout 中央に線が引かれているテキスト。
Underline 下線付きテキスト。

指定したGraphicsオブジェクトで使用できるフォントを取得する

フォントにはスクリーンでしか使えないフォントや、印刷でしか使えないフォントもあります。あるGraphicsオブジェクトで使用できるフォントファミリアは、FontFamily.Familiesプロパティで取得できます。

補足:.NET Framework 4.0から、FontFamily.GetFamiliesメソッドは使用すべきではないとされました。

次の例ではPictureBoxで使用できるフォントファミリアの名前を列挙しています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'がソースファイルの一番上に書かれているものとする

'PictureBox1のGraphicsオブジェクトを取得
Dim g As Graphics = PictureBox1.CreateGraphics()

'PictureBox1で使用できるFontFamily配列を取得
Dim ffs As FontFamily() = FontFamily.Families

'FontFamilyの名前を列挙する
For Each ff As FontFamily In ffs
    Console.WriteLine(ff.Name)
Next

'リソースを解放する
g.Dispose()
C#
コードを隠すコードを選択
//using System.Drawing;
//がソースファイルの一番上に書かれているものとする

//PictureBox1のGraphicsオブジェクトを取得
Graphics g = PictureBox1.CreateGraphics();

//PictureBox1で使用できるFontFamily配列を取得
FontFamily[] ffs = FontFamily.Families;

//FontFamilyの名前を列挙する
foreach (FontFamily ff in ffs)
{
    Console.WriteLine(ff.Name);
}

//リソースを解放する
g.Dispose();
  • 履歴:
  • 2014/5/27 FontFamily.GetFamiliesメソッドにObsoleteAttributeが適用されたことによる説明とサンプルの変更。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。