title: Animating a square on a panel
body: <p>I have a panel on a form which creates the topology of a network for routing packets. I am able to draw the topology on the panel. But, now I want small squares to move from one point to the destination on a button click. How can I do this on a panel? Nothing happens when I click on the button. I will appreciate if anyone could help me. This is part of my code:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>public Form1()
  {            
       InitializeComponent();
  
       this.SetStyle(ControlStyles.UserPaint 
            | ControlStyles.AllPaintingInWmPaint
            | ControlStyles.DoubleBuffer, true);
  
      //Initialize the point to start in the top left corner
      this.SetStyle(ControlStyles.UserPaint
            | ControlStyles.AllPaintingInWmPaint
            | ControlStyles.DoubleBuffer, true);
  
      //Initialize the point to start in the top left corner
      mPoint = new Point(mRect.Location.X, mRect.Location.X);
  
      //Set up the function to call when the timer fires
      TimerCallback timercb = new TimerCallback(TimerCB);
  
      //Set up the timer to fire at the set animation rate
      mTimer = new System.Threading.Timer(timercb,
          null, ANIMATION_RATE, ANIMATION_RATE);    
  }
  
  private void panel2_Paint(object sender, PaintEventArgs e)
  {
      if(sendbut) {
          Graphics dc = panel2.CreateGraphics();
          //Fill the background of the client area
          dc.FillRectangle(SystemBrushes.Control, this.ClientRectangle);
  
          //Draw the big rectangle track
          dc.DrawRectangle(Pens.Black, mRect);
  
          //Clone the point
          Point p = new Point(mPoint.X, mPoint.Y);
  
          //Offset it by half the width and height of the desired rectangle
          p.Offset(-(RECT_WIDTH / 2), -(RECT_HEIGHT / 2));
  
          //Draw the little moving rectangle
          dc.FillRectangle(Brushes.Black, 
              new Rectangle(p, new Size(RECT_WIDTH, RECT_HEIGHT)));
      }
  }
  
  protected void TimerCB(object o)
  {
      //Move the rectangle
      MovePoint();
  
      //Redraw the form
      Invalidate();
  }
  
  private void button3_Click(object sender, EventArgs e)
  {          
      sendbutt = true;
  }
  </code></pre>