C# Colorsの使い方完全ガイド|色名一覧・RGB/ARGB指定・Color構造体をわかりやすく解説
はじめに
C#で画面の背景色や文字色、図形の線色、ボタンの色などを変更したいときに欠かせないのが「Color」です。検索キーワードとしてよく使われる「c# colors」は、C#で使える色名、RGB指定、ARGB指定、Color構造体、WPFのColorsクラスなどをまとめて知りたいときに使われる言葉です。
ただし、C#の色指定は環境によって少しややこしい部分があります。Windows FormsではSystem.Drawing.Colorを使うことが多く、WPFではSystem.Windows.Media.ColorやSystem.Windows.Media.Colorsを使います。さらに、ASP.NETではCSSやHTMLカラーコードとして色を扱う場面も多くなります。
この記事では、C# Colorsの基本から、色名一覧、RGB/ARGB指定、16進カラーコード、Color構造体のプロパティ、実践的な使い方、よくあるエラーまでをわかりやすく解説します。
1. C# Colorsとは?まず押さえるべき基本
1-1. C#で扱う「色」とColor構造体の関係
C#で色を扱うとき、多くの場合はColorという構造体を使います。
Colorは、赤・緑・青・透明度などの情報をまとめて持つ型です。たとえば、赤色を表す場合は次のように書けます。
C#Color color = Color.Red;
このColor.Redは、赤を表す定義済みの色です。
また、RGB値を指定して色を作ることもできます。
C#Color color = Color.FromArgb(255, 0, 0);
この例では、赤が255、緑が0、青が0なので、結果は赤色になります。
つまり、C#における色は単なる文字列ではなく、Color構造体として扱われることが多いという点をまず理解しておきましょう。
1-2. System.Drawing.ColorとSystem.Windows.Media.Colorsの違い
C# Colorsで特に混乱しやすいのが、System.Drawing.ColorとSystem.Windows.Media.Colorsの違いです。
System.Drawing.Colorは、主にWindows FormsやGDI+による描画で使われます。
C#using System.Drawing;
Color color = Color.Red;
一方、WPFではSystem.Windows.Media.ColorやSystem.Windows.Media.Colorsを使います。
C#using System.Windows.Media;
Color color = Colors.Red;
名前が似ていますが、型が異なります。
Windows FormsのColor.Redと、WPFのColors.Redは、どちらも赤色を表します。しかし、所属する名前空間も型も違うため、そのまま代入できない場面があります。
たとえば、次のようなコードは環境によってエラーになります。
C#System.Drawing.Color drawingColor = System.Windows.Media.Colors.Red;
これは、System.Drawing.ColorとSystem.Windows.Media.Colorが別物だからです。必要に応じて変換処理を書かなければなりません。
1-3. Windows Forms・WPF・ASP.NETで色指定の方法が異なる理由
C#といっても、作るアプリの種類によってUIの仕組みが異なります。
Windows Formsでは、古くからあるデスクトップアプリ向けの仕組みとしてSystem.Drawing.Colorがよく使われます。
C#this.BackColor = Color.LightBlue;
WPFでは、色そのものを表すColorだけでなく、背景や文字色に使うためにBrushを指定することが多いです。
C#button.Background = Brushes.LightBlue;
button.Foreground = Brushes.White;
ASP.NETやWebアプリでは、最終的にHTMLやCSSとして表示されるため、#FF0000のような16進カラーコードや、red、blueのようなCSSカラー名を使う場面が多くなります。
HTML<div style="color: #ff0000;">赤い文字</div>
このように、C# Colorsといっても、デスクトップアプリなのか、WPFなのか、Webなのかによって色指定の書き方が変わります。
1-4. ColorとColorsの使い分け早見表
C#で色を指定するときは、使っているUIフレームワークに合わせて選ぶのが基本です。
| 用途 | 主に使う型・クラス | 例 |
|---|---|---|
| Windows Forms | System.Drawing.Color | Color.Red |
| GDI+描画 | System.Drawing.Color | new Pen(Color.Blue) |
| WPF | System.Windows.Media.Color | Colors.Red |
| WPFの背景・文字色 | BrushesまたはSolidColorBrush | Brushes.Red |
| ASP.NET・HTML | CSSカラーコード | #ff0000 |
| 色名を文字列から作成 | Color.FromName | Color.FromName("Red") |
| RGB指定 | Color.FromArgb | Color.FromArgb(255, 0, 0) |
| 透明度つき指定 | Color.FromArgb(a, r, g, b) | Color.FromArgb(128, 255, 0, 0) |
迷った場合は、Windows FormsならColor、WPFならColorsまたはBrushes、WebならCSSカラーコードを使うと考えるとわかりやすいです。
2. C#で色を指定する主な方法
2-1. 色名で指定する方法:Color.Red・Color.Blueなど
もっとも簡単な色指定は、定義済みの色名を使う方法です。
Windows FormsなどでSystem.Drawing.Colorを使う場合は、次のように書きます。
C#using System.Drawing;
Color red = Color.Red;
Color blue = Color.Blue;
Color green = Color.Green;
コントロールの背景色に指定する場合は、次のように使えます。
C#button1.BackColor = Color.Red;
label1.ForeColor = Color.Blue;
WPFの場合は、ColorsまたはBrushesを使います。
C#using System.Windows.Media;
Color red = Colors.Red;
button.Background = Brushes.Red;
WPFでは、背景色や文字色のプロパティがColorではなくBrushを要求することが多いため、Colors.RedではなくBrushes.Redを使う場面が多い点に注意しましょう。
2-2. RGBで指定する方法:Color.FromArgb(red, green, blue)
任意の色を指定したい場合は、RGB値を使います。
RGBとは、Red、Green、Blueの3つの値で色を表す方法です。それぞれ0〜255の範囲で指定します。
C#Color color = Color.FromArgb(255, 128, 0);
この例では、赤が255、緑が128、青が0なので、オレンジ系の色になります。
RGB指定の基本形は次のとおりです。
C#Color.FromArgb(red, green, blue)
たとえば、代表的な色は次のように表せます。
C#Color red = Color.FromArgb(255, 0, 0);
Color green = Color.FromArgb(0, 255, 0);
Color blue = Color.FromArgb(0, 0, 255);
Color white = Color.FromArgb(255, 255, 255);
Color black = Color.FromArgb(0, 0, 0);
色名では表現しにくい細かな色を使いたいときは、RGB指定が便利です。
2-3. ARGBで透明度つきの色を指定する方法
ARGBは、Alpha、Red、Green、Blueの4つの値で色を表します。
Alphaは透明度を表す値です。0が完全に透明、255が完全に不透明です。
C#Color semiTransparentRed = Color.FromArgb(128, 255, 0, 0);
この例では、透明度が128の半透明の赤を作成しています。
ARGB指定の基本形は次のとおりです。
C#Color.FromArgb(alpha, red, green, blue)
たとえば、透明度つきの青を作る場合は次のように書きます。
C#Color transparentBlue = Color.FromArgb(100, 0, 0, 255);
ただし、透明度が実際に反映されるかどうかは、描画先やコントロールの仕様によって異なります。Windows Formsの一部のコントロールでは、BackColorに半透明色を指定しても期待どおりに表示されないことがあります。
2-4. 16進カラーコードをC#で扱う方法
Webでよく使われる#ff0000のような16進カラーコードも、C#で扱えます。
Windows FormsやSystem.Drawing.Colorの場合は、ColorTranslator.FromHtmlを使うと便利です。
C#Color color = ColorTranslator.FromHtml("#ff0000");
この例では、赤色のColorが作成されます。
HTMLカラーコードから背景色を設定する例は次のとおりです。
C#button1.BackColor = ColorTranslator.FromHtml("#3498db");
逆に、ColorをHTMLカラーコードに変換する場合は、ColorTranslator.ToHtmlを使います。
C#string htmlColor = ColorTranslator.ToHtml(Color.Red);
ただし、ColorTranslator.ToHtml(Color.Red)の結果は、#ff0000ではなくRedのような色名になる場合があります。常に#RRGGBB形式にしたい場合は、自分でフォーマットする方法が確実です。
C#Color color = Color.Red;
string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
2-5. Color.FromNameで文字列から色を作成する方法
色名を文字列で指定したい場合は、Color.FromNameを使えます。
C#Color color = Color.FromName("Red");
ユーザーが入力した色名や、設定ファイルに保存した色名からColorを作成したい場合に便利です。
C#string colorName = "LightBlue";
button1.BackColor = Color.FromName(colorName);
ただし、存在しない色名を指定しても例外が発生するとは限りません。期待した色にならない可能性があるため、IsKnownColorなどを使って確認すると安全です。
C#Color color = Color.FromName("UnknownColor");
if (color.IsKnownColor)
{
button1.BackColor = color;
}
else
{
button1.BackColor = Color.Gray;
}
文字列から色を作る場合は、入力値の検証を忘れないようにしましょう。
3. C#で使える色名一覧
3-1. よく使う基本色一覧
C#では、よく使う色が定義済みの色名として用意されています。
| 色名 | RGB値 | 説明 |
|---|---|---|
Black | 0, 0, 0 | 黒 |
White | 255, 255, 255 | 白 |
Red | 255, 0, 0 | 赤 |
Green | 0, 128, 0 | 緑 |
Blue | 0, 0, 255 | 青 |
Yellow | 255, 255, 0 | 黄 |
Orange | 255, 165, 0 | オレンジ |
Purple | 128, 0, 128 | 紫 |
Pink | 255, 192, 203 | ピンク |
Gray | 128, 128, 128 | グレー |
Brown | 165, 42, 42 | 茶色 |
Cyan | 0, 255, 255 | シアン |
Magenta | 255, 0, 255 | マゼンタ |
Transparent | 255, 255, 255に透明度0 | 透明 |
実際のコードでは次のように使えます。
C#button1.BackColor = Color.Yellow;
label1.ForeColor = Color.Black;
色名を使うとコードが読みやすくなります。特に基本色を使う場合は、RGB値を直接書くよりもColor.RedやColor.Blueのほうが意図が伝わりやすいです。
3-2. Webカラー・X11由来の色名一覧
System.Drawing.ColorやWPFのColorsでは、多くの定義済み色名が使えます。これらには、WebカラーやX11由来の色名と同じような名前が多数含まれています。
よく使われる色名の例を挙げると、次のようなものがあります。
| 色名 | RGB値 |
|---|---|
AliceBlue | 240, 248, 255 |
AntiqueWhite | 250, 235, 215 |
Aqua | 0, 255, 255 |
Aquamarine | 127, 255, 212 |
Azure | 240, 255, 255 |
Beige | 245, 245, 220 |
Bisque | 255, 228, 196 |
BlanchedAlmond | 255, 235, 205 |
BlueViolet | 138, 43, 226 |
BurlyWood | 222, 184, 135 |
CadetBlue | 95, 158, 160 |
Chartreuse | 127, 255, 0 |
Chocolate | 210, 105, 30 |
Coral | 255, 127, 80 |
CornflowerBlue | 100, 149, 237 |
Crimson | 220, 20, 60 |
DarkBlue | 0, 0, 139 |
DarkCyan | 0, 139, 139 |
DarkGoldenrod | 184, 134, 11 |
DarkGray | 169, 169, 169 |
DarkGreen | 0, 100, 0 |
DarkOrange | 255, 140, 0 |
DarkRed | 139, 0, 0 |
DeepPink | 255, 20, 147 |
DeepSkyBlue | 0, 191, 255 |
DodgerBlue | 30, 144, 255 |
Gold | 255, 215, 0 |
Goldenrod | 218, 165, 32 |
HotPink | 255, 105, 180 |
IndianRed | 205, 92, 92 |
Indigo | 75, 0, 130 |
Ivory | 255, 255, 240 |
Khaki | 240, 230, 140 |
Lavender | 230, 230, 250 |
LightBlue | 173, 216, 230 |
LightGreen | 144, 238, 144 |
LightGray | 211, 211, 211 |
Lime | 0, 255, 0 |
Maroon | 128, 0, 0 |
Navy | 0, 0, 128 |
Olive | 128, 128, 0 |
Salmon | 250, 128, 114 |
Silver | 192, 192, 192 |
SkyBlue | 135, 206, 235 |
Tomato | 255, 99, 71 |
Violet | 238, 130, 238 |
これらの色名は、デザイン上よく使われる淡い色やアクセントカラーを指定したいときに便利です。
C#panel1.BackColor = Color.CornflowerBlue;
label1.ForeColor = Color.White;
色名を覚える必要はありません。Visual Studioの補完機能を使えば、Color.と入力した時点で候補が表示されます。
3-3. Transparentなど特殊な色の扱い
Transparentは透明色を表す特殊な色です。
C#Color transparent = Color.Transparent;
Transparentは、Alpha値が0の色です。つまり、完全に透明な色を意味します。
ただし、透明色の扱いには注意が必要です。透明にしたいコントロールや描画先が透明表示に対応していなければ、期待どおりに見えません。
たとえば、Windows Formsでコントロールの背景色にColor.Transparentを指定しても、親コントロールの背景がそのまま透けて見えるような動作になり、完全なレイヤー合成とは異なる場合があります。
C#label1.BackColor = Color.Transparent;
また、半透明色を指定した場合も、描画処理では反映されても、通常のコントロールの背景色ではうまく反映されないことがあります。
透明度を確実に使いたい場合は、Graphicsによる描画や、WPFのOpacity、SolidColorBrushのAlpha値など、透明度に対応した仕組みを使うのがおすすめです。
3-4. 色名からRGB値・ARGB値を確認する方法
色名からRGB値を確認するには、R、G、B、Aプロパティを使います。
C#Color color = Color.CornflowerBlue;
Console.WriteLine(color.R);
Console.WriteLine(color.G);
Console.WriteLine(color.B);
Console.WriteLine(color.A);
まとめて表示する場合は、次のように書けます。
C#Color color = Color.CornflowerBlue;
Console.WriteLine($"A={color.A}, R={color.R}, G={color.G}, B={color.B}");
HTMLカラーコードとして確認したい場合は、次のようにします。
C#Color color = Color.CornflowerBlue;
string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
Console.WriteLine(hex);
X2は、数値を2桁の16進数で表示する書式です。たとえば、10は0Aのように表示されます。
3-5. 色名一覧をプログラムで取得する方法
System.Drawing.Colorで使える既知の色名を一覧表示したい場合は、KnownColor列挙体を使います。
C#foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);
Console.WriteLine($"{color.Name}: R={color.R}, G={color.G}, B={color.B}, A={color.A}");
}
Windows FormsのComboBoxに色名一覧を表示する場合は、次のように書けます。
C#foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
comboBox1.Items.Add(knownColor.ToString());
}
選択された色名からColorを作る場合は、Color.FromNameを使います。
C#string selectedName = comboBox1.SelectedItem.ToString();
Color selectedColor = Color.FromName(selectedName);
panel1.BackColor = selectedColor;
色選択機能を作る場合、この方法を使うと定義済み色を簡単に一覧表示できます。
4. RGB・ARGB・Color構造体のプロパティを理解する
4-1. R・G・B・Aプロパティの意味
Color構造体には、色の成分を取得するためのプロパティがあります。
| プロパティ | 意味 |
|---|---|
R | 赤成分 |
G | 緑成分 |
B | 青成分 |
A | Alpha値、透明度 |
たとえば、赤色の各成分を確認すると次のようになります。
C#Color color = Color.Red;
Console.WriteLine(color.A); // 255
Console.WriteLine(color.R); // 255
Console.WriteLine(color.G); // 0
Console.WriteLine(color.B); // 0
通常の不透明な色では、Aは255になります。
4-2. RGB値の範囲は0〜255
RGB値は、それぞれ0〜255の範囲で指定します。
C#Color color = Color.FromArgb(100, 150, 200);
0に近いほどその色成分は弱く、255に近いほど強くなります。
赤を強くしたい場合はRを大きくします。
C#Color red = Color.FromArgb(255, 0, 0);
緑を強くしたい場合はGを大きくします。
C#Color green = Color.FromArgb(0, 255, 0);
青を強くしたい場合はBを大きくします。
C#Color blue = Color.FromArgb(0, 0, 255);
範囲外の値を指定すると例外が発生します。
C#// これはエラーになる
Color color = Color.FromArgb(300, 0, 0);
RGBやARGBを扱うときは、各値が0〜255に収まっているか確認しましょう。
4-3. Alpha値と透明度の関係
Alpha値は透明度を表します。
| Alpha値 | 意味 |
|---|---|
| 0 | 完全に透明 |
| 128 | 半透明 |
| 255 | 完全に不透明 |
半透明の赤を作る場合は、次のようにします。
C#Color color = Color.FromArgb(128, 255, 0, 0);
完全に透明な赤は次のように作れます。
C#Color color = Color.FromArgb(0, 255, 0, 0);
ただし、Alphaが0の場合は完全に透明なので、RGB値が赤であっても画面上では見えません。
透明度を使った描画例は次のとおりです。
C#using (Brush brush = new SolidBrush(Color.FromArgb(128, 255, 0, 0)))
{
e.Graphics.FillRectangle(brush, 10, 10, 100, 100);
}
このように、Graphics描画では半透明色を使った表現ができます。
4-4. ToArgbでColorを数値に変換する方法
Colorは、ToArgbメソッドで32ビット整数に変換できます。
C#Color color = Color.Red;
int argb = color.ToArgb();
Console.WriteLine(argb);
ToArgbで得られる値には、Alpha、Red、Green、Blueの情報が含まれています。
保存用に使う例は次のとおりです。
C#Color color = Color.FromArgb(128, 255, 0, 0);
int value = color.ToArgb();
// 復元
Color restored = Color.FromArgb(value);
色を設定ファイルやデータベースに保存したい場合、ToArgbで整数に変換して保存し、読み込み時にColor.FromArgbで戻す方法が使えます。
4-5. 同じRGBでもColorの比較結果が異なるケース
C#のColorでは、同じRGB値を持っていても、作り方によって比較結果が直感と異なることがあります。
たとえば、次の2つはどちらも赤に見えます。
C#Color color1 = Color.Red;
Color color2 = Color.FromArgb(255, 255, 0, 0);
見た目は同じ赤ですが、Color.Redは名前付き色としての情報を持っています。一方、FromArgbで作った色はARGB値から作った色です。
比較では、単純な見た目のRGBだけでなく、状態情報の違いが影響する場合があります。色の見た目として比較したい場合は、ToArgbを使うとわかりやすいです。
C#bool sameColor = color1.ToArgb() == color2.ToArgb();
RGB成分だけで比較したい場合は、次のように書くこともできます。
C#bool sameRgb =
color1.R == color2.R &&
color1.G == color2.G &&
color1.B == color2.B;
透明度も含めて比較したいなら、Aも比較します。
C#bool sameArgb =
color1.A == color2.A &&
color1.R == color2.R &&
color1.G == color2.G &&
color1.B == color2.B;
5. 実践例:C#でコントロールや描画に色を設定する
5-1. Windows Formsの背景色・文字色を変更する
Windows Formsでは、フォームやコントロールにBackColorやForeColorを設定します。
C#this.BackColor = Color.White;
this.ForeColor = Color.Black;
ボタンの背景色を変更する例です。
C#button1.BackColor = Color.DodgerBlue;
button1.ForeColor = Color.White;
ラベルの文字色を変更する例です。
C#label1.ForeColor = Color.DarkRed;
テキストボックスの背景色を変更する例です。
C#textBox1.BackColor = Color.LightYellow;
textBox1.ForeColor = Color.Black;
Windows Formsでは、System.Drawing.Colorを使うのが基本です。
5-2. WPFで背景色・文字色を変更する
WPFでは、背景色や文字色にBrushを指定します。
C#button.Background = Brushes.DodgerBlue;
button.Foreground = Brushes.White;
XAMLで指定する場合は、次のように書けます。
XML<Button Content="OK"
Background="DodgerBlue"
Foreground="White" />
コードからRGB指定で背景色を設定する場合は、SolidColorBrushを使います。
C#button.Background = new SolidColorBrush(Color.FromRgb(30, 144, 255));
透明度つきの色を指定する場合は、Color.FromArgbを使います。
C#button.Background = new SolidColorBrush(Color.FromArgb(128, 30, 144, 255));
WPFでは、Colors.Redは色そのもの、Brushes.Redは塗りつぶし用のブラシです。背景や文字色にはBrushが必要になることが多いので注意しましょう。
5-3. Graphics描画でPen・Brushに色を指定する
Graphicsで線や図形を描画する場合は、PenやBrushに色を指定します。
線を描く例です。
C#using (Pen pen = new Pen(Color.Blue, 3))
{
e.Graphics.DrawLine(pen, 10, 10, 200, 10);
}
四角形を塗りつぶす例です。
C#using (Brush brush = new SolidBrush(Color.LightGreen))
{
e.Graphics.FillRectangle(brush, 20, 20, 150, 80);
}
半透明の図形を描く例です。
C#using (Brush brush = new SolidBrush(Color.FromArgb(128, 255, 0, 0)))
{
e.Graphics.FillEllipse(brush, 50, 50, 100, 100);
}
描画処理では、ARGBによる透明度指定が活躍します。
5-4. ボタン・ラベル・テキストボックスの色を変える例
Windows Formsでよく使うコントロールの色変更をまとめると、次のようになります。
C#private void Form1_Load(object sender, EventArgs e)
{
// フォーム
this.BackColor = Color.WhiteSmoke;
// ボタン
button1.BackColor = Color.RoyalBlue;
button1.ForeColor = Color.White;
// ラベル
label1.ForeColor = Color.DarkSlateGray;
// テキストボックス
textBox1.BackColor = Color.LightYellow;
textBox1.ForeColor = Color.Black;
}
色を変えるだけで、アプリの見た目は大きく変わります。ただし、背景色と文字色のコントラストが低いと読みにくくなるため、白背景に薄い黄色文字のような組み合わせは避けましょう。
5-5. ユーザーが選んだ色をColorDialogで取得する
Windows Formsでは、ColorDialogを使うとユーザーに色を選んでもらえます。
C#private void buttonSelectColor_Click(object sender, EventArgs e)
{
using (ColorDialog dialog = new ColorDialog())
{
if (dialog.ShowDialog() == DialogResult.OK)
{
Color selectedColor = dialog.Color;
panel1.BackColor = selectedColor;
}
}
}
初期色を指定することもできます。
C#using (ColorDialog dialog = new ColorDialog())
{
dialog.Color = Color.LightBlue;
if (dialog.ShowDialog() == DialogResult.OK)
{
button1.BackColor = dialog.Color;
}
}
ユーザーが自由にテーマカラーや文字色を選べる機能を作りたい場合に便利です。
6. 色の変換テクニック
6-1. ColorからRGB値を取得する
ColorからRGB値を取得するには、R、G、Bプロパティを使います。
C#Color color = Color.Orange;
int r = color.R;
int g = color.G;
int b = color.B;
Console.WriteLine($"R={r}, G={g}, B={b}");
Alpha値も取得したい場合は、Aを使います。
C#int a = color.A;
Console.WriteLine($"A={a}, R={r}, G={g}, B={b}");
色の情報をログに出したり、設定値として保存したりするときによく使います。
6-2. RGB値からColorを作成する
RGB値からColorを作るには、Color.FromArgbを使います。
C#int r = 52;
int g = 152;
int b = 219;
Color color = Color.FromArgb(r, g, b);
Alpha値も指定する場合は、次のようにします。
C#int a = 180;
int r = 52;
int g = 152;
int b = 219;
Color color = Color.FromArgb(a, r, g, b);
ユーザーがスライダーでRGB値を選ぶようなUIでは、スライダーの値からColorを作ることができます。
C#int r = trackBarRed.Value;
int g = trackBarGreen.Value;
int b = trackBarBlue.Value;
panelPreview.BackColor = Color.FromArgb(r, g, b);
6-3. ColorをHTMLカラーコードに変換する
Colorを#RRGGBB形式のHTMLカラーコードに変換するには、次のようにします。
C#Color color = Color.FromArgb(52, 152, 219);
string html = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
Console.WriteLine(html);
Alpha値も含めて#AARRGGBB形式にしたい場合は、次のようにします。
C#string argbHex = $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
ColorTranslator.ToHtmlを使う方法もあります。
C#string html = ColorTranslator.ToHtml(Color.Red);
ただし、色名がある場合はRedのような名前で返ることがあります。Web用に常に16進形式で保存したい場合は、自分で#RRGGBB形式に整形するほうが確実です。
6-4. HTMLカラーコードからColorに変換する
HTMLカラーコードからColorを作るには、ColorTranslator.FromHtmlを使います。
C#Color color = ColorTranslator.FromHtml("#3498db");
色名も指定できます。
C#Color color = ColorTranslator.FromHtml("Red");
入力値が不正な場合に備えて、例外処理を入れておくと安全です。
C#try
{
Color color = ColorTranslator.FromHtml("#3498db");
panel1.BackColor = color;
}
catch (Exception)
{
panel1.BackColor = Color.Gray;
}
ユーザー入力や外部ファイルからカラーコードを読み込む場合は、形式チェックを行うのがおすすめです。
6-5. System.Drawing.ColorとSystem.Windows.Media.Colorを変換する
Windows FormsとWPFを組み合わせる場合など、System.Drawing.ColorとSystem.Windows.Media.Colorを変換したいことがあります。
System.Drawing.ColorからSystem.Windows.Media.Colorへ変換する例です。
C#System.Drawing.Color drawingColor = System.Drawing.Color.CornflowerBlue;
System.Windows.Media.Color mediaColor =
System.Windows.Media.Color.FromArgb(
drawingColor.A,
drawingColor.R,
drawingColor.G,
drawingColor.B);
逆に、System.Windows.Media.ColorからSystem.Drawing.Colorへ変換する例です。
C#System.Windows.Media.Color mediaColor = System.Windows.Media.Colors.CornflowerBlue;
System.Drawing.Color drawingColor =
System.Drawing.Color.FromArgb(
mediaColor.A,
mediaColor.R,
mediaColor.G,
mediaColor.B);
どちらもA、R、G、Bの値を取り出して、相手の型に渡すだけです。型が違うだけで、色成分の考え方は同じです。
7. C# Colorsでよくあるエラー・つまずき
7-1. ColorとColorsを間違えて使ってしまう
C# Colorsでよくあるミスが、ColorとColorsの混同です。
Windows Formsでは、通常は次のように書きます。
C#button1.BackColor = Color.Red;
WPFでは、次のように書きます。
C#button.Background = Brushes.Red;
また、WPFで色そのものを取得する場合は、次のようにします。
C#Color color = Colors.Red;
Color.RedはSystem.Drawing.Colorの定義済み色、Colors.RedはWPFの定義済み色です。
エラーが出たら、まず名前空間を確認しましょう。
C#using System.Drawing;
または、
C#using System.Windows.Media;
同じファイルで両方を使うと名前が衝突することもあります。その場合は、完全修飾名で書くと安全です。
C#System.Drawing.Color drawingColor = System.Drawing.Color.Red;
System.Windows.Media.Color mediaColor = System.Windows.Media.Colors.Red;
7-2. System.Drawingが使えない・参照できない場合
.NETの種類やプロジェクト設定によっては、System.Drawingがそのまま使えないことがあります。
たとえば、コンソールアプリやクラスライブラリでSystem.Drawing.Colorを使いたい場合、参照やパッケージが必要になることがあります。
C#using System.Drawing;
これでエラーになる場合は、プロジェクトにSystem.Drawing.Commonが必要なケースがあります。
ただし、近年の.NETではSystem.Drawing.Commonの利用に注意が必要です。特にクロスプラットフォーム環境では、画像処理や描画用途で制約が出る場合があります。Windows FormsなどWindows向けアプリで使う場合は問題になりにくいですが、LinuxやmacOS上で本格的な画像処理をしたい場合は、別のライブラリの利用も検討しましょう。
単純に色データを持ちたいだけであれば、自分でRGB用のクラスや構造体を用意する方法もあります。
C#public struct RgbColor
{
public byte R { get; }
public byte G { get; }
public byte B { get; }
public RgbColor(byte r, byte g, byte b)
{
R = r;
G = g;
B = b;
}
}
7-3. FromArgbの引数の順番を間違える
Color.FromArgbには、主に次の2つの使い方があります。
C#Color.FromArgb(red, green, blue)
Color.FromArgb(alpha, red, green, blue)
ARGB指定では、最初の引数がAlpha値です。
C#Color color = Color.FromArgb(128, 255, 0, 0);
この例では、Alphaが128、Redが255、Greenが0、Blueが0です。
よくある間違いは、RGBAのつもりで次のように書いてしまうことです。
C#// 意図と違う色になる可能性がある
Color color = Color.FromArgb(255, 0, 0, 128);
C#のFromArgb(a, r, g, b)では、順番はAlpha、Red、Green、Blueです。CSSのrgba(r, g, b, a)とは順番が違うため注意しましょう。
7-4. 透明色を指定したのに反映されない
Color.Transparentや半透明色を指定しても、画面上で期待どおりに見えないことがあります。
C#label1.BackColor = Color.Transparent;
Windows Formsの透明色は、完全な透明レイヤーというより、親コントロールの背景を使うような動作になることがあります。そのため、複雑な重なりや半透明表現には向いていません。
半透明の描画をしたい場合は、Graphicsで描画するほうが適しています。
C#using (Brush brush = new SolidBrush(Color.FromArgb(128, 255, 0, 0)))
{
e.Graphics.FillRectangle(brush, 10, 10, 100, 100);
}
WPFでは、OpacityやAlpha値つきのSolidColorBrushを使うと透明度を扱いやすくなります。
C#button.Background = new SolidColorBrush(Color.FromArgb(128, 255, 0, 0));
透明度が反映されない場合は、指定した色ではなく、コントロールや描画先が透明度に対応しているかを確認しましょう。
7-5. 色名を文字列で指定しても期待通りにならない
Color.FromNameで存在しない色名を指定すると、期待どおりの色にならないことがあります。
C#Color color = Color.FromName("LightBluu");
この例では、LightBlueのつもりでタイプミスしています。こうした場合に備えて、IsKnownColorを確認しましょう。
C#Color color = Color.FromName("LightBluu");
if (!color.IsKnownColor)
{
Console.WriteLine("不明な色名です");
}
また、大文字小文字やスペースにも注意が必要です。
C#Color color1 = Color.FromName("LightBlue");
Color color2 = Color.FromName("lightblue");
多くの場合、大文字小文字は厳密に問題になりにくいですが、ユーザー入力を扱う場合は候補一覧から選択させるほうが安全です。
8. C# Colorsの便利な使い方
8-1. 色名一覧をComboBoxに表示する
Windows Formsで色名一覧をComboBoxに表示するには、KnownColorを使います。
C#private void Form1_Load(object sender, EventArgs e)
{
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
comboBoxColors.Items.Add(knownColor.ToString());
}
}
選択された色を取得するには、次のようにします。
C#private void comboBoxColors_SelectedIndexChanged(object sender, EventArgs e)
{
string colorName = comboBoxColors.SelectedItem.ToString();
Color color = Color.FromName(colorName);
panelPreview.BackColor = color;
}
これだけで、色名一覧から色を選択してプレビューする簡単なUIが作れます。
8-2. 選択した色をプレビュー表示する
ユーザーが選んだ色をプレビュー表示したい場合は、Panelなどの背景色を変更するとわかりやすいです。
C#private void ShowPreview(Color color)
{
panelPreview.BackColor = color;
labelRgb.Text = $"R={color.R}, G={color.G}, B={color.B}";
labelHex.Text = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
ComboBoxで選んだ色をプレビューする例です。
C#private void comboBoxColors_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBoxColors.SelectedItem == null) return;
string name = comboBoxColors.SelectedItem.ToString();
Color color = Color.FromName(name);
if (color.IsKnownColor)
{
ShowPreview(color);
}
}
色名、RGB値、HTMLカラーコードを同時に表示すると、ユーザーにとってわかりやすい色選択画面になります。
8-3. ランダムな色を生成する
ランダムな色を作りたい場合は、Randomを使ってRGB値を生成します。
C#Random random = new Random();
int r = random.Next(256);
int g = random.Next(256);
int b = random.Next(256);
Color randomColor = Color.FromArgb(r, g, b);
ボタンを押すたびに背景色を変える例です。
C#private Random random = new Random();
private void buttonRandom_Click(object sender, EventArgs e)
{
Color color = Color.FromArgb(
random.Next(256),
random.Next(256),
random.Next(256));
this.BackColor = color;
}
ただし、完全にランダムな色は、文字色とのコントラストが悪くなることがあります。UIに使う場合は、明るさを調整したり、背景色に応じて文字色を白または黒に切り替えたりするとよいでしょう。
8-4. テーマカラーを定数・クラスで管理する
アプリ全体で使う色は、あちこちに直接書くよりも、テーマカラーとして一元管理するのがおすすめです。
C#public static class AppColors
{
public static readonly Color Primary = Color.FromArgb(52, 152, 219);
public static readonly Color Secondary = Color.FromArgb(46, 204, 113);
public static readonly Color Danger = Color.FromArgb(231, 76, 60);
public static readonly Color Text = Color.FromArgb(44, 62, 80);
public static readonly Color Background = Color.FromArgb(245, 245, 245);
}
使う側は次のように書けます。
C#buttonSave.BackColor = AppColors.Primary;
buttonDelete.BackColor = AppColors.Danger;
labelTitle.ForeColor = AppColors.Text;
このようにしておくと、デザイン変更があった場合でもAppColorsだけを修正すれば済みます。
WPFの場合は、リソースとして色やブラシを定義することも多いです。
XML<SolidColorBrush x:Key="PrimaryBrush" Color="#3498db" />
<SolidColorBrush x:Key="DangerBrush" Color="#e74c3c" />
8-5. UIデザインで使いやすい色管理の考え方
C# Colorsを使うと自由に色を指定できますが、UIデザインでは色を増やしすぎないことが重要です。
基本的には、次のような役割ごとに色を決めておくと管理しやすくなります。
| 役割 | 例 |
|---|---|
| メインカラー | アプリのブランド色、主要ボタン |
| サブカラー | 補助ボタン、選択状態 |
| 背景色 | 画面全体やパネル背景 |
| 文字色 | 通常テキスト、見出し |
| 警告色 | エラー、削除、危険操作 |
| 成功色 | 完了、保存成功 |
| 無効色 | disabled状態 |
たとえば、保存ボタンは青、削除ボタンは赤、成功メッセージは緑、警告はオレンジのように意味を持たせると、ユーザーに伝わりやすくなります。
また、背景色と文字色のコントラストも重要です。薄い背景には濃い文字、濃い背景には白文字を使うなど、読みやすさを優先しましょう。
9. C# Colorsに関するよくある質問
9-1. C#で色名を一覧表示するには?
System.Drawing.Colorで使える色名を一覧表示するには、KnownColorを使います。
C#foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Console.WriteLine(knownColor.ToString());
}
RGB値も一緒に表示する場合は、次のようにします。
C#foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);
Console.WriteLine($"{color.Name}: R={color.R}, G={color.G}, B={color.B}");
}
ComboBoxに表示すれば、色選択UIとしても使えます。
9-2. C#でRGB指定するには?
C#でRGB指定するには、Color.FromArgb(red, green, blue)を使います。
C#Color color = Color.FromArgb(255, 0, 0);
この例では赤色になります。
RGB値はそれぞれ0〜255の範囲で指定します。
C#Color customColor = Color.FromArgb(52, 152, 219);
Windows Formsでは、このColorをそのままBackColorやForeColorに指定できます。
C#button1.BackColor = customColor;
9-3. C#で透明度を指定するには?
透明度を指定するには、ARGB形式のColor.FromArgb(alpha, red, green, blue)を使います。
C#Color color = Color.FromArgb(128, 255, 0, 0);
最初の引数がAlpha値です。
Alpha値は0〜255で、0が完全透明、255が完全不透明です。
C#Color invisible = Color.FromArgb(0, 255, 0, 0);
Color half = Color.FromArgb(128, 255, 0, 0);
Color opaque = Color.FromArgb(255, 255, 0, 0);
ただし、透明度が表示に反映されるかどうかは、使用するコントロールや描画方法によって異なります。
9-4. Color.RedとColors.Redの違いは?
Color.Redは、主にWindows FormsやSystem.Drawingで使う色です。
C#System.Drawing.Color color = System.Drawing.Color.Red;
Colors.Redは、WPFのSystem.Windows.Mediaで使う色です。
C#System.Windows.Media.Color color = System.Windows.Media.Colors.Red;
どちらも赤色を表しますが、型が違います。
Windows FormsではColor.Red、WPFではColors.RedまたはBrushes.Redを使うと覚えるとよいでしょう。
特にWPFの背景色や文字色では、ColorではなくBrushが必要になることが多いため、次のように書くケースが多いです。
C#button.Background = Brushes.Red;
9-5. C#でカラーコードを使うには?
#ff0000のようなHTMLカラーコードをC#で使うには、ColorTranslator.FromHtmlを使います。
C#Color color = ColorTranslator.FromHtml("#ff0000");
Windows Formsの背景色に指定する例です。
C#button1.BackColor = ColorTranslator.FromHtml("#3498db");
逆に、ColorをHTMLカラーコードに変換するには、次のようにします。
C#Color color = Color.FromArgb(52, 152, 219);
string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
この方法なら、常に#RRGGBB形式の文字列を作れます。
まとめ
C# Colorsを理解するうえで大切なのは、まず使用する環境に合った色の型を選ぶことです。Windows FormsではSystem.Drawing.Color、WPFではSystem.Windows.Media.ColorやColors、背景や文字色にはBrushesやSolidColorBrushを使うのが基本です。
色を指定する方法には、Color.Redのような色名指定、Color.FromArgb(255, 0, 0)のようなRGB指定、Color.FromArgb(128, 255, 0, 0)のようなARGB指定、#ff0000のようなHTMLカラーコード指定があります。
また、R、G、B、Aプロパティを使えば色成分を取得でき、ToArgbを使えば色を数値として保存することもできます。色名一覧を取得したい場合は、KnownColorを使うと便利です。
C#で色を扱うときは、次のポイントを押さえておきましょう。
| やりたいこと | 使う方法 |
|---|---|
| 定義済みの赤や青を使う | Color.Red、Color.Blue |
| RGBで指定する | Color.FromArgb(r, g, b) |
| 透明度つきで指定する | Color.FromArgb(a, r, g, b) |
| HTMLカラーコードを使う | ColorTranslator.FromHtml("#ff0000") |
| 色名文字列から作る | Color.FromName("Red") |
| 色名一覧を取得する | KnownColor |
| WPFで背景色を指定する | Brushes.Red、SolidColorBrush |
| Colorをカラーコードにする | $"#{color.R:X2}{color.G:X2}{color.B:X2}" |
C# Colorsを正しく使えるようになると、フォームの見た目を整えたり、描画処理を作ったり、テーマカラーを管理したりする作業がスムーズになります。まずはColor.RedやColor.FromArgbのような基本から始め、必要に応じてARGB、HTMLカラーコード、WPFのColorsやBrushesへ理解を広げていきましょう。

