5

数か月前、私がこのコードを書いたのは、それが (C# の学習中に) 考えられる唯一の方法だったからです。どのようにしますか?uncheckedこれを行う適切な方法はありますか?

unchecked //FromArgb takes a 32 bit value, though says it's signed. Which colors shouldn't be.
{
  _EditControl.BackColor = System.Drawing.Color.FromArgb((int)0xFFCCCCCC);
}
4

3 に答える 3

6

これは、VB.NET に unsigned 値がなかった時代にさかのぼります。そのため、C# と VB.NET の間の互換性を維持するために、すべての BCL ライブラリは、たとえ論理的に意味がない場合でも、符号付きの値を使用します。

于 2010-02-23T21:51:56.950 に答える
2

intのコンポーネントを分解し、FromArgb()それらを個別に取得するオーバーロードを使用できます。

System.Drawing.Color.FromArgb( 0xFF, 0xCC, 0xCC, 0xCC);
于 2010-02-23T22:03:16.067 に答える
0

拡張メソッドはこれを隠すことができます:

public static Color ToColor(this uint argb)
{
    return Color.FromArgb(unchecked((int)argb));
}

public static Color ToColor(this int argb)
{
    return Color.FromArgb(argb);
}

使用法:

0xff112233.ToColor(); 
0x7f112233.ToColor();

この問題を回避するには、別の表記 (0v12345678 など) またはその他の方法を使用する必要があるようです。

于 2014-11-01T05:08:02.103 に答える