Introduction:
The following article describes how to display clock in a window form using timer control.
Step 1:
Open Visual Studio->new Project->Window Form application
Step 2:
Go to Solution explorer right click on project solution add new item->User control with name "Clocktimer".
Add timer control from toolbox to user control and write the following code in clocktimer.cs
clocktimer.cs
Step 1:
Open Visual Studio->new Project->Window Form application
Step 2:
Go to Solution explorer right click on project solution add new item->User control with name "Clocktimer".
Add timer control from toolbox to user control and write the following code in clocktimer.cs
clocktimer.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace clockdisplay
{
public partial class clocktimer :
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.DarkGoldenrod;
Color minColor = Color.DarkMagenta;
Color secColor = Color.DarkSlateBlue;
Color circleColor = Color.DarkSeaGreen;
Color ticksColor = Color.Red;
// private
System.Windows.Forms.Timer timer1;
// private System.ComponentModel.IContainer components;
public clocktimer()
{
InitializeComponent();
}
private void
clocktimer_Load(object sender, EventArgs e)
{
dateTime = DateTime.Now;
this.clocktimer_Resize_1(sender, e);
}
private void
timer1_Tick(object sender, EventArgs e)
{
this.dateTime = DateTime.Now;
this.Refresh();
}
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);
}
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
clocktimer_Paint_1(object sender, 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
< 60; i++)
{
if (this.bDraw5MinuteTicks
== true && 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
clocktimer_Resize_1(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();
}
}
}
Step 3:
Go to Form1[design].cs and add panel from toolbox then write the following code in Form1.cs
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace clockdisplay
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void
Form1_Load(object sender, EventArgs e)
{
clocktimer obj = new
clocktimer();
panel1.Controls.Add(obj);
}
}
}
No comments:
Post a Comment