mercredi 23 septembre 2015

Generating Random Color Produces Same Color Each Time [duplicate]

This question already has an answer here:

I am trying to create a dynamically added array of user-controls where each one will have a random color assigned to it to make the user more able to differentiate it from others, but when I do that it produces pattern of colors. It will create 10 of the user-controls with the same color then it will change the color for the next 10, I want each separate one to have a different color.

enter image description here

The code for the user-control:

public partial class EquationBox : UserControl
{
    public EquationBox()
    {
        InitializeComponent();

        this.panel4.BackColor = RandomColor();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        this.textBox1.Text = "";
    }

    private Color RandomColor()
    {
        Random rnd = new Random();
        /*KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
        KnownColor randomColorName = names[r.Next(names.Length)];
        Color randomColor = Color.FromKnownColor(randomColorName);
        return randomColor;*/

        Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
        return randomColor;
    }
}

The Code for form1:

    public partial class Form1 : Form
{
    public static EquationBox[] EquationBoxArray = new EquationBox[100];

    public Form1()
    {
        InitializeComponent();

        for (int x = 0; x < 100; x++)
        {
            EquationBoxArray[x] = new EquationBox();
            EquationBoxArray[x].Parent = flowLayoutPanel1;

            EquationBoxArray[x].Visible = false;
        }
    }

    private void add_line_Click(object sender, EventArgs e) //Add Line
    {
          for(int x = 0; x < 100; x++)
          {
              if(!EquationBoxArray[x].Visible)
              {
                  EquationBoxArray[x].Visible = true;
                  EquationBoxArray[x].Refresh();
                  break;
              }
          } 
    }

    private void clear_Click(object sender, EventArgs e) //Clear Lines
    {
        for (int x = 0; x < 100; x++)
        {
            EquationBoxArray[x].Visible = false;
            EquationBoxArray[x].ResetText();
        } 
    }

    private void Form1_SizeChanged(object sender, EventArgs e) //Window Size Changed
    {

    }
}

Thanks in advance, any help would be much appreciated!




Aucun commentaire:

Enregistrer un commentaire