使用Windows Form設計紅綠燈
續C#學號跑馬燈的內容,另一個題目"紅綠燈"的功能大致如下:
- 使用三個LED當交通號誌,顏色分別為紅黃綠,燈號可以隨著無穩態多諧振盪器的振盪改變
- 紅燈和綠燈倒數至少60秒,黃燈2秒
這一個專題的確把同學們搞得焦頭爛額,我當初跟大部分同學一樣選擇這個題目,但是經過多天的設計與揣摩後,發現自己設計的"紅綠燈"沒辦法完全符合老師題目的要求。於是我只好再設計"學號跑馬燈",後來也真的被我做出來了。雖然專題製作拿到了100分,不過,"紅綠燈"沒能做出來還蠻可惜的(因為喜好程度:"紅綠燈">"學號跑馬燈"),所以今天我要試著用Windows Form執行這個專題。
設計紅綠燈
設計表單
物件名稱
- Label:lbsec
- GroupBox:groupBox1
- PictureBox:pbRed、pbYellow、pbGreen
- Timer:timer1

將圖片加入資源檔
加入→新增項目

資源檔

加入資源→加入現有檔案



程式碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TrafficLight
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] secRed = new string[60]; //宣告紅燈秒數
string[] secYellow = new string[2]; //宣告黃燈秒數
string[] secGreen = new string[60]; //宣告綠燈秒數
int t = 0; //宣告紅綠燈計算秒數
private void Form1_Load(object sender, EventArgs e)
{
//畫面執行時所產生的事件
pbRed.Image = Resource1.WHITE;
pbYellow.Image = Resource1.WHITE;
pbGreen.Image = Resource1.WHITE;
timer1.Enabled = false;
timer1.Interval = 1000;
lbsec.Enabled = false;
for (int i = 0; i < secGreen.Length; i++)
{
if (i > (secGreen.Length - 10))
{
secGreen[i] = "0" + (secGreen.Length - i).ToString();
}
else
{
secGreen[i] = (secGreen.Length - i).ToString();
}
}
for (int i = 0; i < secYellow.Length; i++)
{
secYellow[i] = "88"; //黃燈時不顯示秒數
}
for (int i = 0; i < secRed.Length; i++)
{
if (i > (secRed.Length - 10))
{
secRed[i] = "0" + (secRed.Length - i).ToString();
}
else
{
secRed[i] = (secRed.Length - i).ToString();
}
}
}
private void Start_Click(object sender, EventArgs e)
{
//按下"Start"按鈕時所產生的事件
if (Start.Text == "開始")
{
timer1.Enabled = true;
Start.Text = "暫停";
}
else if (Start.Text == "暫停")
{
timer1.Enabled = false;
Start.Text = "開始";
}
}
private void timer1_Tick(object sender, EventArgs e)
{
//Timer1觸發所產生的事件
t += 1;
if (t >= 1 && t <= secGreen.Length)
{
lbsec.Enabled = true;
lbsec.Text = secGreen[t - 1];
lbsec.ForeColor = System.Drawing.Color.Green;
pbRed.Image = Resource1.WHITE;
pbYellow.Image = Resource1.WHITE;
pbGreen.Image = Resource1.GREEN;
}
else if (t >= (secGreen.Length + 1) && t <= (secGreen.Length + secYellow.Length))
{
lbsec.Enabled = false;
lbsec.Text = secYellow[t - (secGreen.Length + 1)];
pbRed.Image = Resource1.WHITE;
pbYellow.Image = Resource1.YELLOW;
pbGreen.Image = Resource1.WHITE;
}
else if (t >= (secGreen.Length + secYellow.Length + 1) && t <= (secGreen.Length + secYellow.Length + secRed.Length))
{
lbsec.Enabled = true;
lbsec.Text = secRed[t - (secGreen.Length + secYellow.Length + 1)];
lbsec.ForeColor = System.Drawing.Color.Red;
pbRed.Image = Resource1.RED;
pbYellow.Image = Resource1.WHITE;
pbGreen.Image = Resource1.WHITE;
if (t == (secGreen.Length + secYellow.Length + secRed.Length))
{
t = 0;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
//按下"button1"按鈕時所產生的事件
this.Close(); //關閉視窗
}
}
}
