如何在 KnowColor C# 中删除与白色相关的颜色

How to remove white related colors in KnowColor C#

我目前正在使用此方法生成用于 DataGriView 单元格背景颜色的随机已知颜色。

    public static Color GetRandomizedKnownColor()
    {
        Random randomGen = new Random();
        KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
        KnownColor randomColorName = names[randomGen.Next(names.Length)];
        Color randomColor = Color.FromKnownColor(randomColorName);
        return randomColor;
    }

现在我想删除所有与白色相关的 KnowColors,以便所有可能生成的颜色都不会与我的应用程序中的白色 DataGriView 单元格背景色形成对比。

我会这样做:

static private Random randomGen = new Random();
public static Color GetRandomizedKnownColor()
{
    int number;
    do
    {
        number = randomGen.Next(28, 168);
    } while (number == (int)KnownColor.White);

    return Color.FromKnownColor((KnownColor)number);
}

请注意,您的 Random 对象在您的代码中将始终 return 相同的值。

KnownColor 元素从 28 到 167 是实际颜色,而其余的是控制颜色(如 ActiveCaptionTextInactiveBorder 等)。如果你真的想要 all KnownColors 并跳过所有白色(除了 "White" 之外还有其他 [255,255,255]),你应该改用此代码:

Color randomColor;
do
{
    randomColor = Color.FromKnownColor((KnownColor)randomGen.Next(1, 175));
} while (randomColor.R + randomColor.G + randomColor.B == 255 * 3);
return randomColor;

如果你想跳过非常浅的颜色,你可以使用这样的条件,例如:

} while (randomColor.R + randomColor.G + randomColor.B >= 250 * 3);