ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4536|ตอบกลับ: 2

[VB.NET] การกดคีย์ Enter เพื่อเลื่อนตำแหน่งโฟกัสของ Control

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5971

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5971

ใน Visual Basic ทุกรุ่น มันไม่มีคำสั่งโดยตรง เวลาที่ผู้ใช้กด Enter แล้วให้โฟกัสไปยัง Control ตัวถัดไป เพราะ VB มันใช้การกดปุ่ม Tab แทน แต่คนทั่วๆไปจะถนัดการกด Enter มากกว่า ดังนั้นเราต้องเขียนโค้ดขึ้นมาใหม่เอง สำหรับ TextBox มันจะอยู่ที่เหตุการณ์ KeyPress ส่วน Control ตัวอื่นๆจะใช้เหตุการณ์ KeyDown แล้วส่งรหัสการกด Tab ไปแทน ... สรุปผู้ใช้งานนึกว่าตัวเองกด Enter แต่แท้ที่จริงเราส่งคีย์ Tab ไปแทนนั่นเอง

e.Handled = True คือ การปิดเสียงลำโพงครับ
ตัวอย่าง ... สำหรับ TextBox Control จะใช้เหตุการณ์ KeyPress
  1.     Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.         If Asc(e.KeyChar) = 13 Then
  3.             e.Handled = True
  4.             SendKeys.Send("{TAB}")
  5.         End If
  6.     End Sub
คัดลอกไปที่คลิปบอร์ด

ตัวอย่าง ... สำหรับ ComboBox Control จะใช้เหตุการณ์ KeyDown
  1.     Private Sub ComboBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
  2.         If e.KeyCode = Keys.Enter Then
  3.             e.Handled = True
  4.             SendKeys.Send("{TAB}")
  5.         End If
  6.     End Sub
คัดลอกไปที่คลิปบอร์ด

ตัวอย่าง ... สำหรับ TextBox Control โดยแก้ไขให้ใช้โปรแกรมย่อยแทน
  1.     Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.         'If Asc(e.KeyChar) = 13 Then
  3.         'e.Handled = True
  4.         'SendKeys.Send("{TAB}")
  5.         'End If
  6.         '/ เรียกใช้ผ่านโปรแกรมย่อยแทน
  7.         Call KeyPressed(TextBox1, e)
  8.     End Sub

  9.     ' / งานซ้ำๆก็ควรเขียนเป็นโปรแกรมย่อย (Sub Program)
  10.     Public Sub KeyPressed(o As Object, e As KeyPressEventArgs)
  11.         If Asc(e.KeyChar) = 13 Then
  12.             e.Handled = True
  13.             SendKeys.Send("{TAB}")
  14.         End If
  15.     End Sub
คัดลอกไปที่คลิปบอร์ด

ตัวอย่าง ... สำหรับ ComboBox Control โดยแก้ไขให้ใช้โปรแกรมย่อยแทน
  1.     Private Sub ComboBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
  2.         'If e.KeyCode = Keys.Enter Then
  3.         'e.Handled = True
  4.         'SendKeys.Send("{TAB}")
  5.         'End If
  6.         '/ เรียกใช้ผ่านโปรแกรมย่อยแทน
  7.         Call KeyDowned(ComboBox1, e)
  8.     End Sub

  9.     Public Sub KeyDowned(o As Object, e As KeyEventArgs)
  10.         If e.KeyCode = Keys.Enter Then
  11.             e.Handled = True
  12.             SendKeys.Send("{TAB}")
  13.         End If
  14.     End Sub
คัดลอกไปที่คลิปบอร์ด


สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

13

โพสต์

40

เครดิต

Newbie

Rank: 1

เครดิต
40
โพสต์ 2020-4-20 15:56:37 | ดูโพสต์ทั้งหมด

ขอบคุณครับ

11

กระทู้

31

โพสต์

427

เครดิต

ผู้ดูแลบอร์ด

Rank: 7Rank: 7Rank: 7

เครดิต
427
โพสต์ 2020-4-21 09:24:19 | ดูโพสต์ทั้งหมด

ผมมีอีก 1 ตัวอย่างคือการเรียกใช้ Function SelectNextControl
เขียนโค้ดได้ดังนี้ครับ (ตัวอย่างผมมี 10 TextBox ใช้ Event Keydown)

  1. 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

  2.         If e.KeyCode = Keys.Enter Then
  3.             Me.SelectNextControl(sender, True, True, True, True)
  4.         End If

  5.     End Sub
คัดลอกไปที่คลิปบอร์ด


ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 04:25 , Processed in 0.121122 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้