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

它需要一个带符号的 int b/c 这可以追溯到 VB.NET 没有无符号值的时候。因此,为了保持 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 回答