版面上有 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
|
public
partial
class
frmTextBoxFcous : Form
{
public
frmTextBoxFcous()
{
InitializeComponent();
}
private
void
TextBoxFcous_Load(
object
sender, EventArgs e)
{
colorcontrol();
}
// override ProcessCmdKey 來進行鍵盤偵測
protected
override
bool
ProcessCmdKey(
ref
Message msg, Keys keyData)
{
// 偵測方向鍵:上、下、左、右
if
(keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
{
// 利用上、下、左、右來判斷,
// 上 -1
// 下 +1
// 左 -2
// 右 +2
int
count = 0;
switch
(keyData)
{
case
Keys.Up:
count--;
break
;
case
Keys.Down:
count++;
break
;
case
Keys.Left:
count -= 2;
break
;
case
Keys.Right:
count += 2;
break
;
}
// 利用 ActiveControl 來判斷 Focus 現在在哪個控件上
string
ActiveControlName =
this
.ActiveControl.Name;
// Form 上的 TextBox 控件名稱,故意用 TextBox1 - TextBox10 來命名,用名稱來控制 Focus 應該往哪跳
int
ActiveControlLength = ActiveControlName.Length;
string
NextControlName =
"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();
return
base
.ProcessCmdKey(
ref
msg, keyData);
}
private
void
colorcontrol()
{
// 無論三七二十一,先把所有的 TextBox 背景變成灰色
// 此語法只針對 TextBox 去掃
foreach
(TextBox txt
in
this
.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;
}
}
}
|