选择随机颜色,但某些颜色除外

时间:2015-06-02 16:06:13

标签: c# arrays

我目前正在使用此代码:

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;

我正在使用它来生成随机颜色并将其设置为我的背景,但我不希望它变黑。

有没有办法从可能的随机颜色中取走黑色?

2 个答案:

答案 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的整数。