InstalledFontCollectionクラスを使用することにより、コンピュータにインストールされているフォントを列挙できます。InstalledFontCollectionクラスのFamiliesプロパティは、FontFamilyオブジェクトの配列となります。FontFamily(フォントファミリア)とは、「基本デザインが同様でスタイルが異なるタイプフェイスのグループ」(フォント ファミリとフォントの作成より)ということです。
次の例では、インストールされているすべてのフォントファミリアを取得し、その内スタイルにRegular(標準テキスト)が使用できるフォントの名前をそのフォントでピクチャボックスに表示しています。なお、「方法 : インストールされているフォントを列挙する」にも同じような例がありますので、そちらも参考にしてください。
'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()
//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オブジェクトで使用できるフォントファミリアは、FontFamily.Familiesプロパティで取得できます。
補足:.NET Framework 4.0から、FontFamily.GetFamiliesメソッドは使用すべきではないとされました。
次の例ではPictureBoxで使用できるフォントファミリアの名前を列挙しています。
'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()
//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();