title: Using analog clock in C# Windows Forms
body: <p>I need to make a analog clock in my windows form menu page in C#. </p>
  
  <p>I have created a user control named "AnalogControl". It uses a timer and here is the code for it:-</p>
  
  <pre><code> public partial class AnalogClock : UserControl
  {
      const float PI = 3.141592654F;
  
      DateTime dateTime;
  
      float fRadius, fCenterX, fCenterY, fCenterCircleRadius, fHourLength;
      float fMinLength, fSecLength, fHourThickness, fMinThickness, fSecThickness;
      bool bDraw5MinuteTicks = true;
      bool bDraw1MinuteTicks = true;
      float fTicksThickness = 2;
  
      Color hrColor = Color.Black;
      Color minColor = Color.Black;
      Color secColor = Color.Black;
      Color circleColor = Color.Black;
      Color ticksColor = Color.Black;
  
  
      public AnalogClock()
      {
          InitializeComponent();
      }
  
      private void AnalogClock_Load(object sender, EventArgs e)
      {
          dateTime = DateTime.Now;
          this.AnalogClock_Resize(sender, e);
      }
  
  
  
  
      private void DrawLine(float fThickness, float fLength, Color color, float fRadians,
  
                            System.Windows.Forms.PaintEventArgs e)
      {
          e.Graphics.DrawLine(new Pen(color, fThickness),
              fCenterX - (float)(fLength / 9 * System.Math.Sin(fRadians)),
              fCenterY + (float)(fLength / 9 * System.Math.Cos(fRadians)),
              fCenterX + (float)(fLength * System.Math.Sin(fRadians)),
              fCenterY - (float)(fLength * System.Math.Cos(fRadians)));
      }
  
      private void DrawPolygon(float fThickness, float fLength, Color color, float fRadians,
  
                               System.Windows.Forms.PaintEventArgs e)
      {
  
          PointF A = new PointF((float)(fCenterX + fThickness * 2 * System.Math.Sin(fRadians + PI / 2)),
              (float)(fCenterY - fThickness * 2 * System.Math.Cos(fRadians + PI / 2)));
          PointF B = new PointF((float)(fCenterX + fThickness * 2 * System.Math.Sin(fRadians - PI / 2)),
              (float)(fCenterY - fThickness * 2 * System.Math.Cos(fRadians - PI / 2)));
          PointF C = new PointF((float)(fCenterX + fLength * System.Math.Sin(fRadians)),
              (float)(fCenterY - fLength * System.Math.Cos(fRadians)));
          PointF D = new PointF((float)(fCenterX - fThickness * 4 * System.Math.Sin(fRadians)),
              (float)(fCenterY + fThickness * 4 * System.Math.Cos(fRadians)));
          PointF[] points = { A, D, B, C };
          e.Graphics.FillPolygon(new SolidBrush(color), points);
      }
  
      private void AnalogClock_Paint(object sender,
            System.Windows.Forms.PaintEventArgs e)
      {
          float fRadHr = (dateTime.Hour % 12 + dateTime.Minute / 60F) * 30 * PI / 180;
          float fRadMin = (dateTime.Minute) * 6 * PI / 180;
          float fRadSec = (dateTime.Second) * 6 * PI / 180;
  
          DrawPolygon(this.fHourThickness,
                this.fHourLength, hrColor, fRadHr, e);
          DrawPolygon(this.fMinThickness,
                this.fMinLength, minColor, fRadMin, e);
          DrawLine(this.fSecThickness,
                this.fSecLength, secColor, fRadSec, e);
  
  
          for (int i = 0; i &lt; 60; i++)
          {
              if (this.bDraw5MinuteTicks == true &amp;&amp; i % 5 == 0)
              // Draw 5 minute ticks
              {
                  e.Graphics.DrawLine(new Pen(ticksColor, fTicksThickness),
                    fCenterX +
                    (float)(this.fRadius / 1.50F * System.Math.Sin(i * 6 * PI / 180)),
                    fCenterY -
                    (float)(this.fRadius / 1.50F * System.Math.Cos(i * 6 * PI / 180)),
                    fCenterX +
                    (float)(this.fRadius / 1.65F * System.Math.Sin(i * 6 * PI / 180)),
                    fCenterY -
                    (float)(this.fRadius / 1.65F * System.Math.Cos(i * 6 * PI / 180)));
              }
              else if (this.bDraw1MinuteTicks == true) // draw 1 minute ticks
              {
                  e.Graphics.DrawLine(new Pen(ticksColor, fTicksThickness),
                    fCenterX +
                    (float)(this.fRadius / 1.50F * System.Math.Sin(i * 6 * PI / 180)),
                    fCenterY -
                    (float)(this.fRadius / 1.50F * System.Math.Cos(i * 6 * PI / 180)),
                    fCenterX +
                    (float)(this.fRadius / 1.55F * System.Math.Sin(i * 6 * PI / 180)),
                    fCenterY -
                    (float)(this.fRadius / 1.55F * System.Math.Cos(i * 6 * PI / 180)));
              }
          }
  
          //draw circle at center
          e.Graphics.FillEllipse(new SolidBrush(circleColor),
                     fCenterX - fCenterCircleRadius / 2,
                     fCenterY - fCenterCircleRadius / 2,
                     fCenterCircleRadius, fCenterCircleRadius);
      }
  
  
  
      private void AnalogClock_Resize(object sender, EventArgs e)
      {
          this.Width = this.Height;
          this.fRadius = this.Height / 2;
          this.fCenterX = this.ClientSize.Width / 2;
          this.fCenterY = this.ClientSize.Height / 2;
          this.fHourLength = (float)this.Height / 3 / 1.85F;
          this.fMinLength = (float)this.Height / 3 / 1.20F;
          this.fSecLength = (float)this.Height / 3 / 1.15F;
          this.fHourThickness = (float)this.Height / 100;
          this.fMinThickness = (float)this.Height / 150;
          this.fSecThickness = (float)this.Height / 200;
          this.fCenterCircleRadius = this.Height / 50;
          timer1.Start();
  
      }
      public Color HourHandColor
      {
          get { return this.hrColor; }
          set { this.hrColor = value; }
      }
  
      public Color MinuteHandColor
      {
          get { return this.minColor; }
          set { this.minColor = value; }
      }
  
      public Color SecondHandColor
      {
          get { return this.secColor; }
          set
          {
              this.secColor = value;
              this.circleColor = value;
          }
      }
  
      public Color TicksColor
      {
          get { return this.ticksColor; }
          set { this.ticksColor = value; }
      }
  
      public bool Draw1MinuteTicks
      {
          get { return this.bDraw1MinuteTicks; }
          set { this.bDraw1MinuteTicks = value; }
      }
  
      public bool Draw5MinuteTicks
      {
          get { return this.bDraw5MinuteTicks; }
          set { this.bDraw5MinuteTicks = value; }
      }
  
  
  
      private void timer1_Tick(object sender, EventArgs e)
      {
          this.dateTime = DateTime.Now;
          this.Refresh();
      }
  
      public void Start()
      {
          timer1.Enabled = true;
          this.Refresh();
      }
  
      public void Stop()
      {
          timer1.Enabled = false;
      }
  
  
  }
  </code></pre>
  
  <p>I am using this control in another form on load event this way:-</p>
  
  <pre><code>this.analogClock1.Start();
  </code></pre>
  
  <p>But the problem is that on the page where I am using the "Analog Control",it is just showing up the box but is not showing up the clock and not even the clock is working.</p>
  
  <p>Kindly help me with the code so that I can run an analog clock on my windows form.</p>