列挙体もクラス
以前公開した色見本を作成する際、色名を全てソース中に書いていたのですが他に方法が無いのかと調べてみました。
そこで見つけたのが、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で定義されている値を配列にコピーし順に色名称を取得しています。