几个月前我编写了这段代码,因为这是我能想到的唯一方法(在学习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);
}
答案 0 :(得分:6)
它需要一个带符号的int b / c,这可以追溯到VB.NET没有无符号值的时候。因此,为了保持C#和VB.NET之间的兼容性,所有BCL库都使用有符号值,即使它没有逻辑意义。
答案 1 :(得分:2)
你可以分解int的组件并使用单独的FromArgb()
重载:
System.Drawing.Color.FromArgb( 0xFF, 0xCC, 0xCC, 0xCC);
答案 2 :(得分: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)或其他一些解决此问题的方法。