C# 创建随机颜色(System.Drawing.Color)

C# 创建随机颜色(System.Drawing.Color),c#,asp.net,C#,Asp.net,我正在尝试创建随机绘制颜色。有一个错误。你能帮我查一下这个密码吗 private Random random; private void MainForm_Load(object sender, EventArgs e) { random = new Random(); } private Color GetRandomColor() { retur

我正在尝试创建随机绘制颜色。有一个错误。你能帮我查一下这个密码吗

        private Random random;

        private void MainForm_Load(object sender, EventArgs e)
        {
            random = new Random();
        }

        private Color GetRandomColor()
        {
            return Color.FromArgb(random.Next(0, 255), random.Next(0,255),random.Next(0,255));
        // The error is here
        }  

        public SolidBrush brushGet()
        {
            SolidBrush oBrush = new SolidBrush(GetRandomColor());
            return oBrush;
        }

猜测
brushGet
MainForm\u Load
之前被调用可能已经创建了
random

除了在调用之前没有初始化随机对象之外,上述代码没有发现任何问题。也绝对不需要在表单的加载事件中初始化它;如果声明:

private static readonly Random Random = new Random();
就我个人而言,我不会在局部范围内声明它,据我所知,如果这样做,每次都会得到相同的值。我个人也不认为有必要将事情过度复杂化;每次使用
Color.FromAgb()
方法生成随机数时,您应该不会有问题。

错误在这里

    private Color color;
    private int b;
    public Color Random()
    {
        Random r = new Random();
        b = r.Next(1, 5);
        switch (b)
        {
            case 1:
                {
                    color = Color.Red;
                }
                break;
            case 2:
                {
                    color = Color.Blue;
                }
                break;
            case 3:
                {
                    color = Color.Green;
                }
                break;
            case 4:
                {
                    color = Color.Yellow;
                }
                break;
        }

        return color;
    }
return Color.FromArgb(random.Next(0,255), random.Next(0,255), random.Next(0,255));
您需要强制转换
随机。下一步(0255)
执行此操作
(字节)随机。下一步(0255)
, 而来自argb的
需要4个参数

这对我很有效(在GetRandomColor):

using Microsoft.VisualBasic.PowerPacks;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Random random = new Random();

        public Form1()
        {    
            InitializeComponent();
        }

        private void ovalShape1_Click(object sender, EventArgs e)
        {        
            ovalShape1.BackStyle = BackStyle.Opaque;

            random = new Random();

            ovalShape1.BackColor = Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));

         }
     }
 }

可以避免生成3个随机数和计算颜色整数:

static Random random = new Random();

Color GetRandomColor() { return Color.FromArgb(unchecked(random.Next() | 255 << 24)); }

Color GetRandomKnownColor() {
    return Color.FromKnownColor((KnownColor)random.Next((int)KnownColor.YellowGreen) + 1); }
静态随机=新随机();

Color GetRandomColor(){返回Color.FromArgb(未选中(random.Next())| 255猜起来并不有趣,但请帮我们一个忙,告诉我们错误是什么。System.NullReferenceException这是一个开始。在哪一行/以什么方法?可能在调用GetRandomColor之前没有初始化随机数。使用private Random Random=new Random()@nonnb良好调用。还可能指出,您最好将字段标记为
static
,以便在第一次引用类时初始化该字段,并且在整个程序中使用相同的RNG实例。然后将您的注释作为答案发布。:)一点解释会提高你的答案的质量。
Color.FromArgb
有一个重载,从时间的黎明开始接受R、G和B的3个int参数。/.NET 1.1它应该是来自Argb,而不是来自RGB(Visual Studio 2015)Thx。现在编辑!
static Random random = new Random();

Color GetRandomColor() { return Color.FromArgb(unchecked(random.Next() | 255 << 24)); }

Color GetRandomKnownColor() {
    return Color.FromKnownColor((KnownColor)random.Next((int)KnownColor.YellowGreen) + 1); }