カラー参照ダイアログについて説明します。
カラー参照ダイアログ
以下の簡単なソースコードを記述します。特に細かい設定がいらなければ以下をコピペすればOKです。
Color select_color = Color.Transparent;
using (ColorDialog dlg = new ColorDialog())
{
//OK以外は処理を抜ける
if (dlg.ShowDialog() != DialogResult.OK)
{
return;
}
//選んだ色を取得
select_color = dlg.Color;
}

最初から色の作成を展開しておく方法

色の作成画面を表示しておきたい場合は以下のようにFullOpenプロパティをtrueにしておきます。
Color select_color = Color.Transparent;
using (ColorDialog dlg = new ColorDialog())
{
dlg.FullOpen = true;
//OK以外は処理を抜ける
if (dlg.ShowDialog() != DialogResult.OK)
{
return;
}
//選んだ色を取得
select_color = dlg.Color;
}
作成した色をはじめからセットしておく方法

作成した色をあらかじめセットしておきたい場合は、CustomColorsプロパティにint型で色をセットすれば表示されます。解説で説明されていますが単純にToArgb()メソッドではできません。
Color select_color = Color.Transparent;
using (ColorDialog dlg = new ColorDialog())
{
dlg.SolidColorOnly = false;
dlg.CustomColors = new int[]
{
0xFF0000,
0x00FF00,
0x0000FF,
GetColorInt(Color.Aquamarine),
GetColorInt(Color.BurlyWood),
GetColorInt(Color.DarkBlue),
GetColorInt(Color.MistyRose)
};
//OK以外は処理を抜ける
if (dlg.ShowDialog() != DialogResult.OK)
{
return;
}
//選んだ色を取得
select_color = dlg.Color;
}
private int GetColorInt(Color color)
{
return color.B << 16 | color.G << 8 | color.R;
}
解説

アクアマリンは、赤「127」緑「255」青「212」です。16進法でいくと赤「7F」緑「FF」青「D4」になります。なのでRGBなら0x7FFFD4としてあげればアクアマリンを表現できるかと思いました。
しかしこのColorDialogのCustomColorsプロパティの値に0xFF0000といれれば赤が出るはずなのに青がでました。調べてみたら以下のようになっていました。

RGBではなく、BGRでした。なのでColor構造体からBGRで色を抽出する関数(GetColorInt)を作成しました。
やっていることを図?(ひっ算?)にしてみました。

作成した色の保存について
自分で作成した色は、CustomColorsプロパティに入っています。中身はint配列なのであとはこれをどうやって保存しておくか?です。
方法としてxmlなどでファイル出力するか、レジストリに追加するか・・・。
結局は、あとでint配列で取得できる形として保存しておければよいかと思います。
まとめ
CustomColorsプロパティが少しややこしかったですが、色のダイアログを出すには便利なクラスです。
この記事が皆様のお役に立てたら幸いです。


コメント