昨天是.net学习的第二天上完课后,老师给我们布置了一些作业,其中有一个是红绿灯的制作,主要是为了学习timer控件的使用。查阅一些相关资料后写下如下代码:
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 TrafficLight
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void drawRectangle()
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(pen, 10, 10, 340, 120);
}
public int iniTime = 0;//计时数
public int flag=0;
public void fillColor()
{
Graphics g = this.CreateGraphics();//实例化一个Graphics对象
switch (flag)
{
case 0:
g.FillEllipse(Brushes.Gray,20,20,100,100);
g.FillEllipse(Brushes.Gray, 130, 20, 100, 100);
g.FillEllipse(Brushes.Gray, 240, 20, 100, 100);
break;
case 1://红灯
g.FillEllipse(Brushes.Red, 20, 20, 100, 100);
g.FillEllipse(Brushes.Gray, 130, 20, 100, 100);
g.FillEllipse(Brushes.Gray, 240, 20, 100, 100);
break;
case 2://黄灯
g.FillEllipse(Brushes.Gray, 20, 20, 100, 100);
g.FillEllipse(Brushes.Yellow, 130, 20, 100, 100);
g.FillEllipse(Brushes.Gray, 240, 20, 100, 100);
break;
case 3://绿灯
g.FillEllipse(Brushes.Gray, 20, 20, 100, 100);
g.FillEllipse(Brushes.Gray, 130, 20, 100, 100);
g.FillEllipse(Brushes.Green, 240, 20, 100, 100);
break;
}
}
Pen pen=new Pen(Color.Blue);
private void timer1_Tick(object sender, EventArgs e)
{
iniTime=5;
if (iniTime != 0)
{
flag = 1; //要填充灯色的标志
fillColor();//填充灯色
}
else
{
timer1.Enabled = false;
timer2.Enabled = true;
timer3.Enabled = false;
}
iniTime--;
}
private void timer3_Tick(object sender, EventArgs e)
{
iniTime=5;
// Graphics g = this.CreateGraphics();
// g.DrawRectangle(pen, 10, 10, 340, 120);
if (iniTime != 0)
{
flag = 3;
fillColor();
}
else
{
timer1.Enabled = true;
timer2.Enabled = false;
timer3.Enabled = false;
}
iniTime--;
}
private void timer2_Tick(object sender, EventArgs e)
{
iniTime = 5;
// Graphics g = this.CreateGraphics();
// g.DrawRectangle(pen, 10, 10, 340, 120);
if (iniTime != 0)
{
flag = 2;
fillColor();
}
else
{
timer1.Enabled = false;
timer2.Enabled = false;
timer3.Enabled = true;
}
iniTime--;
}
private void Form1_Load(object sender, EventArgs e)
{
drawRectangle();
iniTime = 5;
timer1.Enabled = true;
}
}
}
调试后发现红灯可以到绿灯变化,可是绿灯到红灯的变化却不可以实现;还有本来在Form1_Load中的画红绿灯外面的矩形框没有画出来。经过检查发现如果该这段代码 :
{ timer1.Enabled = false
timer2.Enabled = false;
timer3.Enabled = true;
iniTime=5;}也就是在timer的Tick事件执行之前给iniTime赋值就可以实现各色等之间的变换;可是为什么不能在改时间里 面写呢?还有就是要在每个Timer的Tick事件里调入我编写的 drawRectangle()函数就可以绘制出蓝色方框,但是在form的load事件里直接调用不可以绘制出来呢?
嘿嘿,希望看到我问题的各位高手,多多指点,先谢谢了,(*^__^*) 嘻嘻……