列挙体もクラス

以前公開した色見本を作成する際、色名を全てソース中に書いていたのですが 他に方法が無いのかと調べてみました。

そこで見つけたのが、System.Enumを使う方法です。これは、MSDNのヘルプに書かれています。

列挙体は、System.Enumから派生しているためSystem.Enumで定義されているメソッドを使用することができます。 今回の例では、値ではなく色名を取得しています。

Dim lvwItem As ListViewItem

' System.Enum => [Enum]
Dim colors As System.Array = _
        [Enum].GetValues(GetType(KnownColor))
Dim AllColors(colors.Length) As KnownColor

Array.Copy(colors, AllColors, colors.Length)

' リストビューの初期化
lvwColor.Items.Clear()

For i As Integer = 0 To AllColors.Length - 1

    lvwItem = lvwColor.Items.Add("")
    ' 親項目に対してのみ背景色を使用する
    lvwItem.UseItemStyleForSubItems = False

    lvwItem.BackColor = Color.FromName(AllColors(i).ToString())
    ' 色名称
    lvwItem.SubItems.Add(Color.FromName(AllColors(i).ToString()).ToString)

    lvwItem.SubItems.Add(strColorCode)

Next

Enumは予約語となっているため、[]でくくるかSystem.Enumと完全な名前で記述する必要があります。

上記例では、KnownColorで定義されている値を配列にコピーし順に色名称を取得しています。