那天坐广州地铁,看到地铁显示的到站进度灯,想做个相似的效果出来,做的有点低级,是在winform下建立8个label。利用timer、控制跳转到另一个label的时间,先查找所有label,把label赋给一个label对象数组,然后在点击事件里面启用timer用委托完成label色彩轮转、
public Form1()
{
InitializeComponent();
}
Label[] dic = new Label[8];
int i = 0;//遍历
int j = 0;//存有颜色的位置
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)//找出label赋值给数组,并把当前进度位置赋值给全局变量
{
Label lb = c as Label;
if (lb != null)
{
if (lb.BackColor == Color.Red)
{
j = i;
}
dic[i] = lb;
i++;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
System.Timers.Timer atime = new System.Timers.Timer();//实例化一个timer
atime.Interval = 100;//设置执行时间
atime.Elapsed += new System.Timers.ElapsedEventHandler(timing);//将timeing事件绑定到timer执行委托链
atime.AutoReset = true;//一直执行
atime.Enabled = true;//是否执行事件
dic[0].BackColor = Color.Red;
}
public void timing(object sender, System.Timers.ElapsedEventArgs e)
{
for (int i = 0; i < dic.Length; i++)//找出当前进度位置
{
if (dic[i].BackColor == Color.Red)
{
j = i;
}
}
if (j >= 0)
{
dic[j].BackColor = Color.Gray;
if (j == dic.Length - 1)//完成所有进度遍历就重新开始
j = -1;
dic[j + 1].BackColor = Color.Red;
}
}