Color構造体の名前付きの色を列挙して一覧(リスト)に表示する [C#]

カラー 色一覧

.NETのSystem.Drawing名前空間にあるColor構造体に定義されている名前付きの色を列挙して一覧表示するサンプルです。

Color構造体には、アルファベット順であれば、AliceBlueからYellowGreenまで、色の濃淡でいえばBlackからWhiteまでの141色があります。(141色には透明を表すTransparentも含まれます。)

本記事では、Color構造体の名前、RGB値、HTMLカラーコードをリスト形式で表示します。

Color構造体に定義されている色

Color構造体には以下の141色が名前付きの色として定義されています。

Color構造体に定義されている色は、すべて静的プロパティとして公開されています。

Color構造体に定義されている色を取得する

Color構造体に定義されている141種類の名前付きの色を取得するために、Color構造体の静的プロパティの一覧を取得します。
静的プロパティへアクセスして一覧を取得には、System名前空間のTypeクラスや、System.Reflection名前空間に定義されているクラス等を使用します。

静的プロパティの一覧を取得するために、Color構造体のType(型)オブジェクトをtypeof演算子を使って取得します。
TypeクラスのGetPropertiesメソッドを使用してプロパティの一覧を取得します。
GetPropertiesメソッドのパラメーターに、BindingFlags列挙型が持つフィールドのPublicとStaticの2つのフラグを指定することで、publicな静的プロパティを取得することができます。

GetPropertiesメソッドは、PropertyInfoオブジェクトの配列を返します。
PropertyInfoクラスにはNameプロパティがありますので、Color構造体に定義されている色のプロパティの名前を取得することができます。
Color構造体のFromNameメソッドを使うことで、Colorオブジェクトが名前から生成することができます。
例えば、上記のコードで取得したPropertyInfoオブジェクトの配列「propertyInfos」から、列挙可能なColorオブジェクトのコレクションを取得する場合は、次のようにします。

上記の例では、配列が持つLINQの拡張メソッドであるSelectメソッドで、列挙可能なIEnumerable型のコレクションオブジェクトを取得しています。

Reflectionプロパティやメソッドについては、以下の記事もご参照ください。

.NET Reflection(リフレクション)Tips コードスニペット一覧 [C#]
.NETのReflection(リフレクション)を使ったTipsのコードスニペット集です。 本記事に記載のコードでは、以下のu...

LINQの拡張メソッドについては、以下の記事もご参照ください。

LINQ 拡張メソッド一覧
LINQが登場して10年以上が経過しましたが、私の周りには未だに使えない開発者の方が大勢いらっしゃいます。 「ラムダ式がよくわからないので...

取得したコレクションをリストに表示する

取得したColorオブジェクトのリストをリストに表示します。
今回は、Windowsフォームアプリケーションに用意されているDataGridViewコントロールを使って一覧を表示します。

TypeクラスのGetPropertiesメソッドで取得したColorオブジェクトのコレクションをDataGridViewコントロールに表示すると、以下のようになります。

DataGridViewコントロールにColorオブジェクトのコレクションを一覧表示

(以下、単に「グリッド」と表記している場合は、DataGridViewコントロールのことを示します。)

表示用のデータを作成する

Colorオブジェクトのままでは、少しわかりづらいのでColorオブジェクトのデータをもとに、グリッドに表示するために加工した新しいデータを作成します。
グリッドにはColorオブジェクトの名前(Name)、RGB値(RGB)、HTMLカラーコード(Html)を表示します。

DataGridViewコントロールにColorオブジェクトのコレクションを一覧表示

グリッドに表示するName、RGB、Htmlをプロパティに持つクラスを作成します。

Colorオブジェクトのコレクションをもとに、上記のWebColorクラスのオブジェクトのコレクションを作成します。

上記のコードではColorオブジェクトをもとに、HTMLカラーコードを取得しています。
ColorオブジェクトからHTMLカラーコードを取得する方法の詳細については、以下の記事を参考にしてください。

Color構造体からHTMLの色名およびカラーコード(#rrggbb)に変換する。 [C#]
Color構造体の色(Colorオブジェクト)をHTML形式の文字列に変換する方法を紹介します。 HTML形式の文字列に変換 ...

グリッドに表示する

グリッドにWebColorオブジェクトのコレクションを表示するには、DataGridViewクラスのDataSourceプロパティを使用します。

今回はグリッドの色名(Name)を表示するセルの背景色にColorオブジェクトの色を設定します。

上記のコードのindexには行のインデックスを表す数値が代入されています。

サンプルコード

最後に、Windowsフォームアプリケーションで、Color構造体に定義されている名前付きの色の一覧をグリッドに表示するサンプルプログラムの全ソースコードを記載しておきます。

Color構造体の静的プロパティを参照することで、名前が定義されている色の一覧を取得してグリッドに表示することができました。
.NET Framework、.NET Coreには、名前が定義されている色として、コントロールやウィンドウの色などのシステムカラーも用意されています。

システムカラーを含む名前が定義されているすべての色を取得する方法については、以下の記事にまとめていますので、参考にしてみてください。

.NET Framework, .NET Core に定義されている色(名前付きの色)一覧
.NET Framework、.NET Coreに定義されている色(名前で参照できる色)の一覧を取得する方法を紹介します。 名...

システムカラーの一覧のみを取得してリストに表示する方法についても、以下の記事にまとめていますので、合わせて参考にしてみてください。

システムカラーを列挙して一覧(リスト)に表示する SystemColorsクラス [C#]
.NETのSystem.Drawing名前空間にあるSystemColorsクラスに定義されている名前付きの色を列挙して一覧表示する...