C#學號跑馬燈

  • 3080
  • 0
  • 2017-09-19

使用Windows Form設計學號跑馬燈

發想

在我高中三年級的時候,我們的數位邏輯老師要求我們全班用數位邏輯電路做專題,兩位同學一組。題目共兩題,分別為"學號跑馬燈"和"紅綠燈",每一組同學可以自行選擇一個題目,在考統測之前繳交。如果功能完全符合老師題目的要求,就能拿到100分。我選擇的題目是"學號跑馬燈",功能大致如下:

  • 使用兩個七段顯示器顯示自己的學號(我的學號是13050059),學號可以隨著無穩態多諧振盪器的振盪移動
  • 設計一個開關。輸入高電位時,學號左移;輸入低電位時,學號右移。

電路圖:

由於電路體積龐大,這個專題花了我兩個多月的時間才得以在課堂上完成。現今除了高職的課程會使用不同的積體電路組合電路,大部分都採用可程式邏輯裝置設計電路,減少時間和出錯的機率。那麼,這個專題是否也能在Windows Form執行呢?

設計學號跑馬燈

設計表單

物件名稱

  • Label:label1、lbLeft、lbRight、Direction
  • TextBox:SudentIDNo
  • RadioButton:SheftLeft、SheftRight
  • Button:Start、Stop
  • 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 StudentIDNo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string num = "";  //宣告字串

        private void Form1_Load(object sender, EventArgs e)
        {
            //畫面執行時所產生的事件
            ShiftLeft.Checked = true;  //預設選取左移
            timer1.Enabled = false;  //停止計時
            timer1.Interval = 1000;  //計時時間為1秒
            Start.Enabled = false;  //"開始"按鈕停用
            Stop.Enabled = false;  //"停止"按鈕停用
            Direction.Visible = false;  //隱藏"移動方向"標籤
            lbLeft.Enabled = false;  //學號開始跑前設為灰字
            lbRight.Enabled = false;  //學號開始跑前設為灰字
        }

        private void Start_Click(object sender, EventArgs e)
        {
            //按下"開始"按鈕時所產生的事件
            StudentIDNo.Enabled = false;  //學號不能輸入
            num = StudentIDNo.Text;  //將學號存到num字串
            timer1.Enabled = true;  //開始計時
            Start.Enabled = false;  //"開始"按鈕停用
            Stop.Enabled = true;  //"停止"按鈕啟用 
            if (ShiftLeft.Checked == true)  //如果選擇"左移"
            {
                ShiftRight.Enabled = false;  //"右移"按鈕停用
                Direction.Text = "←  ←  ←  ←  ←";  //顯示位移方向
            }
            else if (ShiftRight.Enabled == true)  //如果選擇"右移"
            {
                ShiftLeft.Enabled = false;  //"左移"按鈕停用
                Direction.Text = "→  →  →  →  →";  //顯示位移方向
            }
        }

        private void Stop_Click(object sender, EventArgs e)
        {
            //按下"停止"按鈕時所產生的事件
            StudentIDNo.Enabled = true;  //可以輸入新的學號
            timer1.Enabled = false;  //開始計時
            Start.Enabled = true;  //"開始"按鈕停用
            Stop.Enabled = false;  //"停止"按鈕啟用  
            Direction.Visible = false;  //隱藏"移動方向"標籤
            ShiftLeft.Enabled = true;  //"左移"按鈕啟用
            ShiftRight.Enabled = true;  //"右移"按鈕啟用
            num = StudentIDNo.Text;  //將學號重新存到num字串
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //Timer1觸發所產生的事件
            Direction.Visible = true;  //顯示"移動方向"標籤 
            lbLeft.Enabled = true;  //學號開始跑後設為黑字
            lbRight.Enabled = true;  //學號開始跑後設為黑字
            if (ShiftLeft.Checked == true)  //如果選擇"左移"
            {
                lbLeft.Text = num.Substring(0, 1);  //左邊標籤的字為學號第1碼
                lbRight.Text = num.Substring(1, 1);  //右邊標籤的字為學號第2碼
            }
            else if (ShiftRight.Checked == true)  //如果選擇"右移"
            {
                lbRight.Text = num.Substring(0, 1);  //右邊標籤的字為學號第1碼
                lbLeft.Text = num.Substring(1, 1);  //左邊標籤的字為學號第2碼
            }
            num = num.Substring(1, StudentIDNo.TextLength - 1) + num.Substring(0, 1); //將學號第1碼排到最後面
        }

        private void StudentIDNo_TextChanged(object sender, EventArgs e)
        {
            //輸入字串所產生的事件
            if (StudentIDNo.TextLength ==0)  //如果沒有輸入學號
            {
                Start.Enabled = false;  //"開始"按鈕停用
            }
            else  //如果有輸入學號
            {
                Start.Enabled = true;  //"開始"按鈕啟用
            }
        }
    }
}

執行畫面(影片連結)