本人能力有限,代码写的还很次,请大家谅解。
最终效果:(如下图)
源代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace _3._6_TrafficLight_Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义公共变量
int time =30, result = 0;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start(); //启动计时器
}
//窗体绘制事件
private void Form1_Paint(object sender, PaintEventArgs e)
{
//自定义方法——颜色填充
FillColor();
}
//红灯的计时器
private void timer1_Tick(object sender, EventArgs e)
{
result = 1;
//自定义方法——颜色填充
FillColor();
label1.Text = Convert.ToString(--time);
label1.ForeColor = Color.Red;
if (time<0)
{
timer1.Stop();
timer2.Start();
time = 10; //黄灯要显示的时间
result = 2; //显示黄灯
label1.Text = time.ToString();
label1.ForeColor = Color.Yellow;
//自定义方法——颜色填充
FillColor();
}
}
//黄灯的计时器
private void timer2_Tick(object sender, EventArgs e)
{
label1.Text = Convert.ToString(--time);
if (time<0)
{
timer2.Stop();
timer3.Start();
time = 30; //绿灯要显示的时间
result = 3; //显示绿灯
label1.Text = time.ToString();
label1.ForeColor = Color.Green;
//自定义方法——颜色填充
FillColor();
}
}
//绿灯的计时器
private void timer3_Tick(object sender, EventArgs e)
{
label1.Text = Convert.ToString(--time);
if (time < 0)
{
timer3.Stop();
timer1.Start();
time = 30; //红灯要显示的时间
result = 1; //显示红灯
label1.Text = time.ToString();
label1.ForeColor = Color.Red;
//自定义方法——颜色填充
FillColor();
}
}
//自定义方法——颜色填充
private void FillColor()
{
Graphics grp = this.CreateGraphics();
switch (result)
{
case 1: //红灯
{
grp.FillEllipse(Brushes.Red, 20, 20, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 120, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 220, 80, 80);
break;
}
case 2: //黄灯
{
grp.FillEllipse(Brushes.DarkBlue, 20, 20, 80, 80);
grp.FillEllipse(Brushes.Yellow, 20, 120, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 220, 80, 80);
break;
}
case 3: //绿灯
{
grp.FillEllipse(Brushes.DarkBlue, 20, 20, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 120, 80, 80);
grp.FillEllipse(Brushes.Green, 20, 220, 80, 80);
break;
}
default:
{
grp.FillEllipse(Brushes.DarkBlue, 20, 20, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 120, 80, 80);
grp.FillEllipse(Brushes.DarkBlue, 20, 220, 80, 80);
break;
}
}
grp.Dispose();
}
}
}