[VB.NET] การป้อนค่าลง TextBox เพื่อให้รับค่าเฉพาะที่ต้องการได้เท่านั้น
ตัวอย่างนี้จะให้สามารถกดได้เพียงตัวอักขระ (Character) คือ A - Z, 0 - 9 เครื่องหมาย - และ _ ได้เท่านั้นPrivate Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
'// ดักค่าการกดคีย์ที่เราต้องการ
'// ต้องการ A - Z, 0 - 9 อักขระพิเศษ - และ _
e.Handled = SpecialChar(Asc(e.KeyChar))
End Sub
Function SpecialChar(index As Byte) As Boolean
SpecialChar = True
Select Case index
'// 48 To 57 คือรหัสแอสกี้โค้ดตั้งแต่ '0' ถึง '9'
Case 48 To 57, Asc("A") To Asc("Z"), Asc("_"), Asc("-")
SpecialChar = False
Case 8 ' Back Space
SpecialChar = False
Case 13 ' Enter
SpecialChar = False
'// ตัวที่ไม่อยู่ในรายการให้ Return True
Case Else
SpecialChar = True
End Select
End Function
แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2018-5-9 10:39
ผมขออนุญาตอาจารย์ทองก้อนเพิ่มอีกรูปแบบครับ
การระบุประเภทข้อความให้กับ Textbox ในรูปแบบ Class
โดยหากต้องการข้อมูลประเภทไหนก็ให้ Textbox เรียกใช้ผ่าน Class Clstextbox โดยใช้ Events KeyPress ดังนี้ครับ
ตัวอย่างฟอร์ม
โค้ดของ Class Clstextbox
Public Class ClsTextbox
' ระบุประเภทรูปแบบของ Textbox
Public Enum Text_type
Number_Only
Number_with_dot
Thai_alphabet
Thai_alphabet_with_number
English_alphabet
English_alphabet_with_number
End Enum
' กำหนดรูปแบบข้อความของ Textbox แต่ละประเภท
Public Shared Sub Set_textbox_value(sender As Object, e As KeyPressEventArgs, Value_Type As Text_type)
Dim key_ascii As Byte
key_ascii = Asc(e.KeyChar) ' รับค่า e.keychar จาก textbox เป็น Key ascii
' อนุญาตให้ใช้ปุ่ม Backspace = 8 / Enter = 13
If key_ascii = 8 Or key_ascii = 13 Then
Exit Sub
End If
Select Case (Value_Type)
Case Text_type.Number_Only
If key_ascii >= 48 And key_ascii <= 57 Then ' 48 = 0 - 57 = 9
e.Handled = False
Else
e.Handled = True
End If
Case Text_type.Number_with_dot
If ((key_ascii >= 48 And key_ascii <= 57) Or key_ascii = 46) Then ' 48 = 0 - 57 = 9 / 46 - "."
e.Handled = False
Else
e.Handled = True
End If
Case Text_type.Thai_alphabet
If key_ascii >= 161 And key_ascii <= 240 Then ' ภาษาไทยรวมทั้งตัวสระ + วรรณยุกต์
e.Handled = False
Else
e.Handled = True
End If
Case Text_type.Thai_alphabet_with_number
If key_ascii >= 48 And key_ascii <= 57 Then ' 48 = 0 - 57 = 9
e.Handled = False
ElseIf key_ascii >= 161 And key_ascii <= 240 Then
e.Handled = False
Else
e.Handled = True
End If
Case Text_type.English_alphabet
If key_ascii >= 58 And key_ascii <= 122 Then ' ภาษาอังกฤษ 58 - 122
e.Handled = False
Else
e.Handled = True
End If
Case Text_type.English_alphabet_with_number
If key_ascii >= 48 And key_ascii <= 57 Then ' 48 = 0 - 57 = 9
e.Handled = False
ElseIf key_ascii >= 58 And key_ascii <= 122 Then ' ภาษาอังกฤษ 58 - 122
e.Handled = False
Else
e.Handled = True
End If
End Select
End Sub
End Class
กรณีที่ต้องการกำหนดให้ Textbox ใช้รูปแบบข้อความที่สามารถป้อนได้ในแต่ละรูปแบบ ให้เรียกใช้ผ่าน Class Clstextbox โดยใช้ Events KeyPress ดังนี้
Public Class Form1
' Number_Only
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.Number_Only)
End Sub
'Number_with_dot
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.Number_with_dot)
End Sub
' Thai_alphabet
Private Sub TextBox3_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox3.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.Thai_alphabet)
End Sub
' Thai_alphabet_with_number
Private Sub TextBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox4.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.Thai_alphabet_with_number)
End Sub
' English_alphabet
Private Sub TextBox5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox5.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.English_alphabet)
End Sub
' English_alphabet_with_number
Private Sub TextBox6_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox6.KeyPress
ClsTextbox.Set_textbox_value(sender, e, ClsTextbox.Text_type.English_alphabet_with_number)
End Sub
ท่านที่สนใจสามารถดาวน์โหลดโค้ด VB2017 ได้ที่นี่ครับ
ประโยชน์ของ Class คือหากโค้ดตัวไหนที่เราคิดว่าใช้บ่อยและเป็นประโยชน์กับอีกหลายโปรเจคแน่นอน สามารถสร้างเป็นไฟล์ .dll (ไลบรารี่ลิงก์แบบไดนามิก)
โดยจะเป็นการเขียนโค้ดแค่ครั้งเดียวไม่ต้องมาเขียนโค้ดเดิมซ้ำ อีกต่อไป ดังนี้
1. สร้างโปรเจคแบบ คลาสไลบรารี่ขึ้นมา
2. หลังจากที่เขียนโค้ดสำหรับสร้างไฟล์ .dll เสร็จ ให้เลือก เมนู Build ==> Build Solution
จะได้ไฟล์ .dll ออกมาดังนี้
3. ต่อไปสร้างโปรเจคใหม่ของเราขึ้นมาเพื่อเรียกใช้ไฟล์ .dll ที่เราสร้างขึ้นมาโดยไม่ต้องเขียนโค้ดใหม่
โดยการ Add reference ไฟล์ .dll เข้ามาในโปรเจคของเรา
หลังจากที่ Add reference แล้ว
สำหรับการเรียกใช้โค้ดจากไฟล์ .dll ดังนี้
Imports T = TextValue.TextValue
Public Class Form1
Dim txt As New TextValue.TextValue
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.Number_Only)
End Sub
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.Number_with_dot)
End Sub
Private Sub TextBox3_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox3.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.Thai_alphabet)
End Sub
Private Sub TextBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox4.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.Thai_alphabet_with_number)
End Sub
Private Sub TextBox5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox5.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.English_alphabet)
End Sub
Private Sub TextBox6_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox6.KeyPress
txt.Set_textbox_value(sender, e, T.Text_type.English_alphabet_with_number)
End Sub
End Class
เป็นอันเสร็จขั้นตอนสำหรับการเขียนโค้ด โดยไม่ต้องเขียนโค้ดตาม Class Clstextbox อีกต่อไปสามารถทำให้งานเราเสร็จเร็วขึ้นได้ในระดับหนึ่ง
ตัวอย่างโค้ดไฟล์ .dll และโปรเจคที่เรียกใช้ไฟล์ .dll ท่านที่สนใจสามารถดาว์นโหลดได้ที่นี่ครับ
ไฟล์ VB2017
ขอบคุณครับอาจารย์ thongkorn และคุณ puklit :)
หน้า:
[1]