我想尝试一下dotnetbar样式管理器的色调。在C#的System.Drawing.Color中有相当多的颜色,所以我想做一个简单的应用程序,它有一个按钮,可以遍历每种颜色。
我想做一些foreach循环或者类似的事情,但是它说System.Drawing.Color是一种类型。我是C#的新手,有没有办法做到这一点?
发布于 2011-12-20 16:19:20
您引用的是通过静态属性在System.Drawing.Color structure中定义的命名颜色。它们都列在文档中,但是正如您所发现的,没有直观的方式遍历它们。
取而代之的是,您需要使用Reflection (简而言之,可以看到自己的代码)来获取它们。基本上,您要做的是获取Color类型中所有公共静态属性的集合(在本例中,恰好是命名的颜色),然后循环遍历每个属性。
例如,您可以使用这样的代码(警告,未测试!):
var colorType = typeof(System.Drawing.Color);
var staticProperties = colorType.GetProperties(BindingFlags.Static | BindingFlags.Public);
var colors = staticProperties.Select(prop => (Color)prop.GetValue(null, null));
foreach (Color clr in colors)
{
// Test the color...
}发布于 2011-12-20 16:02:58
Color.FromArgb做到了这一点。使用它,你可以制作新的颜色。
例如,要使其变为红色:
Color c = Color.FromArgb(255, 0, 0); 顺便说一句,“逐步通过每种颜色”可能有点多。有256(alpha) x 256(红色)x 256(绿色)x 256(蓝色)颜色。它们是4294967296组合。
发布于 2011-12-20 16:15:23
如果你仍然想尝试一下,只是为了好玩,我会推荐以下几点。
(你说你是新手,所以我会做一步一步的指导)
我们将创建一个简单的示例,我们只需更改将要按下的按钮的颜色。
for (int r= 0;r <= 255;r++) { for (int g= 0;g <= 255;g++) { for (int b= 0;b <= 255;b++) {r++1.BackColor= Color.FromArgb(r,g,b);}按钮中的
backgroundWorker1.RunWorkerAsync();
现在你可以观察颜色了..。很久很久了。:)
https://stackoverflow.com/questions/8572288
复制相似问题