thongkorn โพสต์ 2018-3-11 22:18:55

[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-7 10:05:50

แก้ไขครั้งสุดท้ายโดย 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



pankiat913 โพสต์ 2018-5-7 12:30:50

ขอบคุณครับอาจารย์ thongkorn และคุณ puklit :)
หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] การป้อนค่าลง TextBox เพื่อให้รับค่าเฉพาะที่ต้องการได้เท่านั้น