0

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

    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 单元格背景颜色不形成对比。

4

1 回答 1

1

我会这样做:

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对象将始终在代码中返回相同的值。

KnownColor从 28 到 167 的元素是实际颜色,而其余元素指的是控制颜色(如ActiveCaptionTextInactiveBorder等)。如果您实际上想要所有 KnownColors并跳过所有白色(除了“白色”之外还有其他 [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);
于 2016-02-04T06:27:02.693 回答