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

Jos*_*osh 3 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;
Run Code Online (Sandbox Code Playgroud)

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

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

Pae*_*dow 8

选项1:只需使用列表删除方法:

List<KnownColor> namesList = new List<KnownColor>((KnownColor[])Enum.GetValues(typeof(KnownColor)));
namesList.Remove(KnownColor.Black);
KnownColor[] names = namesList.ToArray();
Run Code Online (Sandbox Code Playgroud)

选项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)]);
Run Code Online (Sandbox Code Playgroud)

添加:您还可以删除所有黑色但未命名为黑色的颜色(例如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);
}
Run Code Online (Sandbox Code Playgroud)