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

时间:2011-12-11 16:46:02

标签: c# asp.net

我正在尝试创建随机绘图颜色。有一个错误。你能帮我解释一下这段代码吗?

        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;
        }

7 个答案:

答案 0 :(得分:3)

我没有看到上述代码有任何问题,除了在调用之前没有初始化Random对象。也绝对不需要在表单的Load事件中初始化它;它可以在声明时正确完成:

private static readonly Random Random = new Random();

就个人而言,我不会在本地范围内声明它,据我所知,如果你这样做,你每次都会得到相同的价值。我个人也不认为需要过于复杂的事情;每次生成随机数并使用Color.FromAgb()方法你应该没问题。

答案 1 :(得分:3)

这适用于我(在GetRandomColor):

Random random = new Random();
return Color.FromArgb((byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(0, 255));

答案 2 :(得分:2)

    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;
    }

答案 3 :(得分:1)

brushGet创建MainForm_Load之前,猜测 random被调用。

答案 4 :(得分:1)

错误在这里

return Color.FromArgb(random.Next(0,255), random.Next(0,255), random.Next(0,255));

您需要投射random.Next(0, 255)执行此(byte)random.Next(0, 255), 并且FromArgb需要4个参数。

答案 5 :(得分:1)

可以避免生成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); }

unchecked | 255 << 24部分用于避免透明色。

答案 6 :(得分:0)

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));

         }
     }
 }