我目前正在使用此代码:
Random randomColor = new Random();
KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
KnownColor randomColorName = names[randomColor.Next(names.Length)];
Color RandomColor = Color.FromKnownColor(randomColorName);
this.BackColor = RandomColor;
我正在使用它来生成随机颜色并将其设置为我的背景,但我不希望它变黑。
有没有办法从可能的随机颜色中取走黑色?
答案 0 :(得分:9)
选项1:只需使用使用清单的删除方法:
List<KnownColor> namesList = new List<KnownColor>((KnownColor[])Enum.GetValues(typeof(KnownColor)));
namesList.Remove(KnownColor.Black);
KnownColor[] names = namesList.ToArray();
选项2:仅使用列表。它们比阵列具有更多的管理可能性:
Random randomColor = new Random();
List<KnownColor> names = new List<KnownColor>((KnownColor[])Enum.GetValues(typeof(KnownColor)));
names.Remove(KnownColor.Black);
this.BackColor = Color.FromKnownColor(names[randomColor.Next(names.Count)]);
添加:您还可以删除所有黑色但未命名为黑色的颜色(例如ActiveCaption):
List<KnownColor> names = new List<KnownColor>((KnownColor[])Enum.GetValues(typeof(KnownColor)));
foreach (KnownColor i in names)
{
if (Color.FromKnownColor(i).ToArgb() == Color.Black.ToArgb()) names.Remove(i);
}
答案 1 :(得分:1)
最快,最有效的方法是:
Random rng = new Random();
public Color randomColor()
{
Color.FromArgb(rng.Next(-16777216, -1));
}
这将创建一个没有黑色的随机颜色。它的工作原理是因为颜色类将颜色保存为黑色为0的整数。