版面上有 100 個 textbox,編號為 1-100,textbox 排列為 1 欄 20 個,共 5 欄,當一開打這個 form 會將在第一欄第一列第一個 textbox 的背景顏色變更為黃色,然後可以透過鍵盤的 上、下、左、右來選取 textbox,當被選到的 textbox 背景顏色會為"黃色",沒有選到的會為灰色(預設)
拉 100 個 TextBox 實在是太瘋狂了,只利用 10 個 TextBox、5 欄來練習
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | publicpartialclassfrmTextBoxFcous : Form{    publicfrmTextBoxFcous()    {        InitializeComponent();    }    privatevoidTextBoxFcous_Load(objectsender, EventArgs e)    {        colorcontrol();    }    // override ProcessCmdKey 來進行鍵盤偵測    protectedoverrideboolProcessCmdKey(refMessage msg, Keys keyData)    {        // 偵測方向鍵:上、下、左、右        if(keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)        {            // 利用上、下、左、右來判斷,            // 上 -1            // 下 +1            // 左 -2            // 右 +2            intcount = 0;            switch(keyData)            {                caseKeys.Up:                    count--;                    break;                caseKeys.Down:                    count++;                    break;                caseKeys.Left:                    count -= 2;                    break;                caseKeys.Right:                    count += 2;                    break;            }            // 利用 ActiveControl 來判斷 Focus 現在在哪個控件上            stringActiveControlName = this.ActiveControl.Name;            // Form 上的 TextBox 控件名稱,故意用 TextBox1 - TextBox10 來命名,用名稱來控制 Focus 應該往哪跳            intActiveControlLength = ActiveControlName.Length;            stringNextControlName = "TextBox"+ (Convert.ToInt16(ActiveControlName.Substring(7, ActiveControlLength - 7)) + count).ToString();            // 確認 TextBox 是否真的存在            Control[] ctls = this.Controls.Find(NextControlName, false);            if(ctls.Length != 0) this.Controls[NextControlName].Focus();        }        colorcontrol();        returnbase.ProcessCmdKey(refmsg, keyData);    }    privatevoidcolorcontrol()    {        // 不管三七二十一,先把全部的 TextBox 背景變成灰色        // 此語法只針對 TextBox 去掃        foreach(TextBox txt inthis.Controls.OfType<textbox>())        {            txt.BackColor = Color.Gray;        }        // Form 一開始執行時就必須變色,此時無法偵測 ActiveControl,        // 此情況顯示 TextBox1,同時也把 TextBox1 的 Tab Order 設為 0        if(this.ActiveControl == null)        {            textBox1.BackColor = Color.Yellow;        }        else        {            this.ActiveControl.BackColor = Color.Yellow;        }    }} | 
 
        