.NET TIPS

列挙体の値を列挙するには?

デジタルアドバンテージ
2003/04/04

 列挙体(列挙型)は一定の数の定数(定数のグループ)を定義するためのものだ。例えば、.NET Frameworkのクラス・ライブラリには、週の7つの曜日を定義したDayOfWeek列挙体(System名前空間)が用意されている。

 列挙体で定義されたそれぞれの定数の値を取得するには、Enumクラス(System名前空間)のGetValuesメソッドを使用する。このメソッドはstaticなメソッドであるため、インスタンスを作成しなくても、次のようにして呼び出すことができる。

Array arr = Enum.GetValues(typeof(DayOfWeek));

 Enum.GetValuesメソッドは、列挙体で定義されたすべての定数を含んだArrayクラスのオブジェクトを返す。パラメータには対象となる列挙体の型を表すTypeクラスのオブジェクトを指定する。typeofはTypeオブジェクトを取得するためのC#の演算子だ(Visual Basic .NETではGetType式を使用する)。

 上記のコードは、あらかじめ次のように型付きの配列にキャストしておいた方が、各要素を扱いやすいかもしれない。

DayOfWeek[] dow = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));

 次のサンプル・プログラムは、DayOfWeek列挙体に含まれている定数の値(列挙体の定数はデフォルトではint型)と、その名前を列挙する。

// enumvalues.cs

using System;

class EnumValues {
  public static void Main() {

    foreach (DayOfWeek dow in Enum.GetValues(typeof(DayOfWeek))) {
      Console.WriteLine((int)dow + ", " + dow.ToString());
    }
    // 出力:
    // 0, Sunday
    // 1, Monday
    // 2, Tuesday
    // 3, Wednesday
    // 4, Thursday
    // 5, Friday
    // 6, Saturday

  }
}
// コンパイル方法:csc enumvalues.cs
DayOfWeek列挙体の値を列挙するC#のサンプル・プログラム(enumvalues.cs)

レンダリング・モードの列挙

 .NET Frameworkのクラス・ライブラリでは、Windowsアプリケーションでテキストを描画する場合の品質を定義したTextRenderingHint列挙体(System.Drawing.Text名前空間)が用意されている。次に、Enum.GetValuesメソッドでこの列挙体の値を列挙し、各品質でテキストを描画するプログラムを作成してみよう。

 まずVisual Studio .NETを起動し、新しいプロジェクトとしてC#のWindowsアプリケーションを開く。これにより次のようなフォームが作成される。

Visual Studio .NETで作成されるフォーム

 次にコードを表示し、次のコードを追加する。

protected override void OnPaint(PaintEventArgs e)
{
  Graphics g = e.Graphics;

  Font font = new Font(
    new FontFamily("Times New Roman"),
    32,
    FontStyle.Bold,
    GraphicsUnit.Pixel);

  int y = 0;
  foreach (TextRenderingHint trh
        in Enum.GetValues(typeof(TextRenderingHint))) {
    g.TextRenderingHint = trh;
    g.DrawString(trh.ToString(), font,
        SystemBrushes.WindowText, new PointF(0, y));
    y += 40;
  }
}
コードを開いて追加するOnPaintメソッド
このOnPaintメソッドは描画が必要な場合に呼び出される。ここではまずFontオブジェクトを作成し、テキストのレンダリング・モードを設定してから、作成したFontオブジェクトで文字列を描画する。なお、プログラムの先頭には「using System.Drawing.Text;」を追加する必要がある。

 プログラムを実行すると次のような画面が表示される。

プログラムの実行結果
TextRenderingHint列挙体で定義された各品質で、その値の名前を描画している。

 Single〜の2つの行以外はアンチエイリアシングされているのが分かるだろうか。End of Article

カテゴリ:クラス・ライブラリ 処理対象:列挙体
使用ライブラリ:Enumクラス(System名前空間)
使用ライブラリ:DayOfWeek列挙体(System名前空間)
使用ライブラリ:TextRenderingHint列挙体(System.Drawing.Text名前空間)
使用キーワード:typeof演算子
関連TIPS:列挙体の名前を列挙するには?
 
この記事と関連性の高い別の.NET TIPS
列挙体の名前を列挙するには?
メッセージ・ボックスを表示するには?
Windowsのシステム・フォルダのパスを取得するには?
Win32 APIやDLL関数を呼び出すには?
Win32 APIやDLL関数に構造体を渡すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH