title: c# how to change the color of rectangle every 5 seconds
body: <p>i have a program that has bouncing squares within a form, i also have to make it so that every 5 seconds the drawn squares change color, i have a timer to update a listbox on the coordinates of each box and a second timer with the interval of 5000 to change the color of the square. now i am trying to figure out how exactly do i change the color of the squares with the timer, i have a method called <code>colorchange</code> with a property called <code>rectcolor</code></p>
  
  <pre><code> private Color Rectcolor { get; set; }
  
   }
      public Color Colorchange()
      {
          Rectcolor =  Color.FromArgb(randcolor.Next(256), randcolor.Next(256), randcolor.Next(256));
          return Rectcolor;
      }
  </code></pre>
  
  <p>in <code>Form1</code> i have the timer2 tick event with a foreach going through the boxes</p>
  
  <pre><code> public partial class Form1 : Form
  {
      Random Randcolor = Box.randcolor;
      Random Rand = Box.rand;
      List&lt;Box&gt; Boxes = new List&lt;Box&gt;();
  
      public Form1()
      {
          InitializeComponent();
          this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
          this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
          this.SetStyle(ControlStyles.UserPaint, true);
  
      }
      private void timer2_Tick(object sender, EventArgs e)
      {
          foreach (Box tmp in Boxes)
          {
              tmp.Colorchange();
          }
      }
  </code></pre>
  
  <p>when i run the program nothing happens with the moving rectangles, how do i make <code>colorchange</code> actually change the color of the rectangle?</p>
  
  <p>Full Box Class Code</p>
  
  <pre><code>class Box
  {
      protected Rectangle myRectangle;
      protected int xStep;
      protected int yStep;
      protected Form pForm;
      protected Label myLocation;
      protected Color myColor;
      public static Random rand = new Random();
      public static Random randcolor = new Random();
  
      public Box(int x, int y, int s, Form pF)
      {
          myColor = new Color();
          myColor = Colorchange();
          myLocation = new Label();
          myLocation.BackColor = Color.Transparent;
          myLocation.Left = x;
          myLocation.Top = y;
          myLocation.ForeColor = Colorchange();
          pF.Controls.Add(myLocation);
          pForm = pF;
          myRectangle = new Rectangle(x, y, s, s);
          myRectangle.X = x;
          myRectangle.Y = y;
          xStep = rand.Next(1, 15);
          yStep = rand.Next(1, 15);
      }
  
      public int X { get { return myRectangle.X; } }
      public int Y { get { return myRectangle.Y; } }
      private int Width { get { return myRectangle.Width; } }
      private int Height { get { return myRectangle.Height; } }
      private Color Rectcolor { get; set; }
      public void Move()
      {
          myRectangle.X += xStep;
          myRectangle.Y += yStep;
          if (myRectangle.X &lt;= 0)
              xStep *= -1;
          if (myRectangle.X + myRectangle.Width &gt;= pForm.ClientSize.Width)
              xStep *= -1;
          if (myRectangle.Y &lt;= 0)
              yStep *= -1;
          if (myRectangle.Y + myRectangle.Height &gt;= pForm.ClientSize.Height)
              yStep *= -1;
          //if (myRectangle.X &gt;500)
          //    xStep *= -1;
  
      }
      public Color Colorchange()
      {
          Rectcolor =  Color.FromArgb(randcolor.Next(256), randcolor.Next(256), randcolor.Next(256));
          return Rectcolor;
      }
  
  
      public static bool Bounce(Box One, Box Two)
      {
          if (One.X + One.Width &lt; Two.X)
              return false;
          if (Two.X + Two.Width &lt; One.X)
              return false;
          if (One.Y + One.Height &lt; Two.Y)
              return false;
          if (Two.Y + Two.Height &lt; One.Y)
              return false;
          return true;
      }
      //public void collision()
      //{
  
      //    xStep *= -1;
      //    yStep *= -1;
      //}
      public void Draw(Graphics g)
      {
          g.DrawRectangle(new Pen(Color.Blue), myRectangle);
  
          myLocation.Top = myRectangle.Y -15;
          myLocation.Left = myRectangle.X+(myRectangle.Width/4);
          myLocation.Text = myRectangle.X.ToString() + ", " + myRectangle.Y.ToString();
  
      }
  </code></pre>
  
  <p>i start the timer on the buttone click, i will give you form1</p>
  
  <pre><code>  public partial class Form1 : Form
  {
      Random Randcolor = Box.randcolor;
      Random Rand = Box.rand;
      List&lt;Box&gt; Boxes = new List&lt;Box&gt;();
  
      public Form1()
      {
          InitializeComponent();
          this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
          this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
          this.SetStyle(ControlStyles.UserPaint, true);
  
      }
  
      private void button1_Click(object sender, EventArgs e)
      {
          // Box tmp = new Box(100, 100, 40);
          // Boxes.Add(tmp);
          for (int x = 1; x &lt; 10; x++)
          {
              Boxes.Add(
                  new Box(
                      Rand.Next(100 + x * 10, this.ClientSize.Width - 100),
                  Rand.Next(100 + x * 10, this.ClientSize.Height - 100),
                  Rand.Next(100 + x * 15), this));
  
              //Boxes.Add(new Box(100 + x * 10, 100 + x * 10, x * 15, this));
  
          }
          timer1.Enabled = true;
          timer2.Enabled = true;
  
      }
  
      private void Form1_Paint(object sender, PaintEventArgs e)
      {
          foreach (Box tmp in Boxes)
          {
              tmp.Draw(e.Graphics);
  
          }
      }
  
      private void timer1_Tick(object sender, EventArgs e)
      {
          listBox1.Items.Clear();
          foreach (Box tmp in Boxes)
          {
              tmp.Move();
              listBox1.Items.Add(tmp.X + ", " + tmp.Y);
          }
          this.Invalidate(false);
  
  
      }
  
      private void Form1_Load(object sender, EventArgs e)
      {
  
      }
  
      private void timer2_Tick(object sender, EventArgs e)
      {
          foreach (Box tmp in Boxes)
          {
              tmp.Colorchange();
          }
      }
  
  }
  </code></pre>
  
  <p>}</p>