以下のコードでは、カラーリングは常に #DDDD を与えます。緑、赤、スペースの値が表示されます。これを修正するにはどうすればよいですか?
string colorstring;
int Blue = 13;
int Green = 0;
int Red = 0;
int Space = 14;
colorstring = String.Format("#{0:X}{0:X}{0:X}{0:X}", Blue, Green, Red, Space);
以下のコードでは、カラーリングは常に #DDDD を与えます。緑、赤、スペースの値が表示されます。これを修正するにはどうすればよいですか?
string colorstring;
int Blue = 13;
int Green = 0;
int Red = 0;
int Space = 14;
colorstring = String.Format("#{0:X}{0:X}{0:X}{0:X}", Blue, Green, Red, Space);
の数字0
は{0:X}
、リストまたは引数内の位置を示します。この場合0
、最初の値である を使用することを意味しますBlue
。{1:X}
2 番目の引数 ( Green
) などに使用します。
colorstring = String.Format("#{0:X}{1:X}{2:X}{3:X}", Blue, Green, Red, Space);
format パラメーターの構文は、ドキュメントで説明されています。
フォーマット項目の構文
各フォーマット アイテムは次の形式を取り、次のコンポーネントで構成されます。
{ index[,alignment][:formatString]}
対応する中かっこ (「{」と「}」) が必要です。
指数構成要素
パラメータ指定子とも呼ばれる必須のインデックス コンポーネントは、オブジェクトのリスト内の対応する項目を識別する 0 から始まる番号です。つまり、パラメーター指定子が 0 のフォーマット項目はリストの最初のオブジェクトをフォーマットし、パラメーター指定子が 1 のフォーマット項目はリストの 2 番目のオブジェクトをフォーマットする、というように続きます。
同じパラメータ指定子を指定することで、複数の書式項目がオブジェクトのリスト内の同じ要素を参照できます。たとえば、"{0:X} {0:E} {0:N}" のような複合書式文字列を指定することで、同じ数値を 16 進数、指数、および数値形式で書式設定できます。
各フォーマット項目は、リスト内の任意のオブジェクトを参照できます。たとえば、3 つのオブジェクトがある場合、"{1} {0} {2}" のような複合フォーマット文字列を指定して、2 番目、1 番目、3 番目のオブジェクトをフォーマットできます。フォーマット項目によって参照されていないオブジェクトは無視されます。パラメーター指定子がオブジェクトのリストの範囲外の項目を指定すると、実行時例外が発生します。
アライメント コンポーネント
オプションの配置コンポーネントは、フォーマットされた優先フィールド幅を示す符号付き整数です。整列の値がフォーマットされた文字列の長さよりも小さい場合、整列は無視され、フォーマットされた文字列の長さがフィールド幅として使用されます。フィールド内の書式設定されたデータは、配置が正の場合は右揃えになり、配置が負の場合は左揃えになります。パディングが必要な場合は、空白が使用されます。配置を指定する場合は、カンマが必要です。
書式文字列コンポーネント
オプションの formatString コンポーネントは、フォーマットされるオブジェクトのタイプに適したフォーマット文字列です。対応するオブジェクトが数値の場合は標準またはカスタムの数値書式文字列を指定し、対応するオブジェクトが DateTime オブジェクトの場合は標準またはカスタムの日付と時刻の書式文字列を指定し、対応するオブジェクトが列挙値の場合は列挙書式文字列を指定します。formatString が指定されていない場合は、数値、日付と時刻、または列挙型の一般的な ("G") 書式指定子が使用されます。formatString が指定されている場合は、コロンが必要です。
あなたの場合、インデックスとフォーマット文字列しかないことに注意してください。整列コンポーネントが指定されていません (そして必要ありません)。
X
this:のように、 の後に数字を含めることで、文字を埋め込むこともできます。string.format("0x{0:X8}", string_to_modify)
これにより、 が生成されます"0x00000C20"
。
構成された UInt32 色Value
を .NET の CSS に変換する
質問が 3 つの入力値 ( ) に当てはまることはわかっていますred
green
blue
。しかし、すでに構成された 32bit がある状況があるかもしれませんValue
。データを何らかの HTML CSS レンダラーに送信したいようです (#HEX 形式のため)。実際、CSS は、ここにゼロで埋められた 6 桁または少なくとも 3 桁の 16 進数を出力することを要求しています。そう#{0:X06}
または#{0:X03}
必要になるでしょう。奇妙な動作のため、これは常に 6 桁ではなく 8 桁を出力します。
これを次の方法で解決します。
String.Format("#{0:X02}{1:X02}{2:X02}", (Value & 0x00FF0000) >> 16, (Value & 0x0000FF00) >> 8, (Value & 0x000000FF) >> 0)
より一般的に。
byte[] buf = new byte[] { 123, 2, 233 };
string s = String.Concat(buf.Select(b => b.ToString("X2")));
整数値を COLOR に変換する関数が組み込まれている場合は、心配する必要はありません。
string hexValue = string.Format("{0:X}", intColor);
Color brushes = System.Drawing.ColorTranslator.FromHtml("#"+hexValue);