C#紅綠燈

  • 6028
  • 0
  • 2017-09-19

使用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();  //關閉視窗
        }

    }
}

執行畫面(影片連結)