WisdomSoft - for your serial experiences.

3.2 フォント

Graphics クラスの DrawString() メソッドで描画するテキストのフォントは、パラメータで指定する Font オブジェクトで設定します。Font オブジェクトを生成し、指定したフォントでテキストを描画する方法を解説します。

3.2.1 描画するテキストのフォントを変更する

通常、コントロールに描画するべきテキストのフォント情報は Control クラスの Font プロパティから取得する Font オブジェクトを使うべきです。描画するテキストのサイズやスタイルを設定するには新しく Font オブジェクトを作らなくてはなりません。

Font クラスのコンストラクタは数多くオーバーロードされていますが、最も基本的なコンストラクタは次のようなものです。

Font クラスのコンストラクタ
public Font(string familyName, float emSize)
public Font(string familyName, float emSize, FontStyle style)

famulyName にはフォントファミリを文字列で指定し、emSize にはフォントサイズをポイント単位(1/72 インチ)で指定します。style にはフォントスタイルを設定します。

フォントファミリとは、フォントの基本デザインを表す名前のことで、つまりフォント名と考えてかまいません。フォントの形はフォントファミリとスタイルの組み合わせによって決定します。コンピュータによってインストールされているフォントは異なりますが、すべての Windows には必ず次のフォントが標準でインストールされています。

  • Courier New (太字、斜体、太字 斜体のスタイルを含む TrueType)
  • Arial (太字、斜体、太字 斜体のスタイルを含む TrueType)
  • Times New Roman (太字、斜体、太字 斜体のスタイルを含む TrueType)
  • Symbol (TrueType)
  • Wingdings (TrueType)
  • MS Serif
  • MS Sans Serif

フォントは、Windows フォルダの Fonts フォルダ内に格納されています。インストールされているフォルダを確認するには「ファイル名を指定して実行」から「%windir%fonts」を入力してください。

フォント名は、例えば「メモ帳」のようなソフトのフォント選択ダイアログを使うと一覧を見ることができます。プログラムからフォントファミリのリストを取得する方法については後述するので、確実にインストールされているフォントファミリを文字列で指定してください。

図1 フォント選択ダイアログ
図1 フォント選択ダイアログ

フォントスタイルには System.Drawing.FontStyle 列挙体のいずれかのメンバを設定します。

System.Drawing.FontStyle 列挙体
[Flags]
[Serializable]
public enum FontStyle

FontStyle には、太字を表す Bold、斜体を現す Italic、打ち消し線を表す Strikeout、下線を表す Underline、そして標準状態を表す Regular が定義されています。

FontStyle 列挙体は FlagsAttribute 属性を含んでいます。この属性は、列挙対のメンバがビットごとの演算に対応していることを表しています。よって、例えば斜体でありかつ下線のスタイルを使いたい場合には次のように論理和演算子を使って組み合わせることができます。

FontStyle.Italic | FontStyle.Underline

ただし、Regular は標準状態のテキストを表すものなので、組み合わせで利用しても意味はありません。

コード1
using System.Drawing;
using System.Windows.Forms;

public class Test : Form
{
	protected override void OnPaint(PaintEventArgs e) 
	{
		base.OnPaint(e);
		Font font1 = new Font("Arial", 20);
		Font font2 = new Font("Arial", 20, FontStyle.Bold);
		Font font3 = new Font("Arial", 20, FontStyle.Italic);
		Font font4 = new Font("Arial", 20, FontStyle.Italic | FontStyle.Underline);
		SolidBrush brush = new SolidBrush(Color.Black);

		string text = "Such is the Four days of Fate,as once promised.";
		e.Graphics.DrawString(text, font1, brush , 0, 0);
		e.Graphics.DrawString(text, font2, brush , 0, font1.Height);
		e.Graphics.DrawString(
			text, font3, brush , 0, font1.Height + font2.Height);
		e.Graphics.DrawString(
			text, font4, brush , 0, font1.Height + font2.Height + font3.Height);
	}
	static void Main() 
	{
		Application.Run(new Test());
	}
}
実行結果
コード1 実行結果

コード1は、Arial フォントのサイズに 20 を指定して各種スタイルで描画しています。一番上が標準、二番目が太字、三番目が斜体、最後が論理和演算子によって組み合わせた斜体と下線スタイルのフォントを使っています。

また、コード1では改行を表現するためにフォントの行間を取得しています。行間は Font クラスの Height プロパティから得ることができます。