[VB.NET] การกดคีย์ Enter เพื่อเลื่อนตำแหน่งโฟกัสของ Control
ใน Visual Basic ทุกรุ่น มันไม่มีคำสั่งโดยตรง เวลาที่ผู้ใช้กด Enter แล้วให้โฟกัสไปยัง Control ตัวถัดไป เพราะ VB มันใช้การกดปุ่ม Tab แทน แต่คนทั่วๆไปจะถนัดการกด Enter มากกว่า ดังนั้นเราต้องเขียนโค้ดขึ้นมาใหม่เอง สำหรับ TextBox มันจะอยู่ที่เหตุการณ์ KeyPress ส่วน Control ตัวอื่นๆจะใช้เหตุการณ์ KeyDown แล้วส่งรหัสการกด Tab ไปแทน ... สรุปผู้ใช้งานนึกว่าตัวเองกด Enter แต่แท้ที่จริงเราส่งคีย์ Tab ไปแทนนั่นเองe.Handled = True คือ การปิดเสียงลำโพงครับ
ตัวอย่าง ... สำหรับ TextBox Control จะใช้เหตุการณ์ KeyPress
Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Asc(e.KeyChar) = 13 Then
e.Handled = True
SendKeys.Send("{TAB}")
End If
End Sub
ตัวอย่าง ... สำหรับ ComboBox Control จะใช้เหตุการณ์ KeyDown
Private Sub ComboBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
If e.KeyCode = Keys.Enter Then
e.Handled = True
SendKeys.Send("{TAB}")
End If
End Sub
ตัวอย่าง ... สำหรับ TextBox Control โดยแก้ไขให้ใช้โปรแกรมย่อยแทน
Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
'If Asc(e.KeyChar) = 13 Then
'e.Handled = True
'SendKeys.Send("{TAB}")
'End If
'/ เรียกใช้ผ่านโปรแกรมย่อยแทน
Call KeyPressed(TextBox1, e)
End Sub
' / งานซ้ำๆก็ควรเขียนเป็นโปรแกรมย่อย (Sub Program)
Public Sub KeyPressed(o As Object, e As KeyPressEventArgs)
If Asc(e.KeyChar) = 13 Then
e.Handled = True
SendKeys.Send("{TAB}")
End If
End Sub
ตัวอย่าง ... สำหรับ ComboBox Control โดยแก้ไขให้ใช้โปรแกรมย่อยแทน
Private Sub ComboBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
'If e.KeyCode = Keys.Enter Then
'e.Handled = True
'SendKeys.Send("{TAB}")
'End If
'/ เรียกใช้ผ่านโปรแกรมย่อยแทน
Call KeyDowned(ComboBox1, e)
End Sub
Public Sub KeyDowned(o As Object, e As KeyEventArgs)
If e.KeyCode = Keys.Enter Then
e.Handled = True
SendKeys.Send("{TAB}")
End If
End Sub
ขอบคุณครับ ผมมีอีก 1 ตัวอย่างคือการเรียกใช้ Function SelectNextControl
เขียนโค้ดได้ดังนี้ครับ (ตัวอย่างผมมี 10 TextBox ใช้ Event Keydown)
Private Sub TextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox9.KeyDown, TextBox8.KeyDown, TextBox7.KeyDown, TextBox6.KeyDown, TextBox5.KeyDown, TextBox4.KeyDown, TextBox3.KeyDown, TextBox2.KeyDown, TextBox10.KeyDown, TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(sender, True, True, True, True)
End If
End Sub
หน้า:
[1]