thongkorn โพสต์ 2017-10-26 20:52:25

[VB6] การป้อนค่าใน TextBox เพื่อให้รับค่าได้เฉพาะตัวเลขเท่านั้น

หลักการและทฤษฎี:
ASCII = American Standard Code for Information Interchange (อ่านว่า แอสกี้)
เวลาที่คุณกดแป้นคีย์บอร์ดตัวอักษร "A" เครื่องคอมพิวเตอร์มันไม่รู้จักหรอกครับ มันรู้จักแต่ความแตกต่างทางศักย์ไฟฟ้า เช่น + กับ Ground หรือ + กับ - หรือ สถานะ High Voltage กับ Low Voltage ... แต่ในภาษามนุษย์เราจะนำมันมาเปรียบเทียบและกล่าวถึงเพียงแค่ "0" กับ "1" (ตัวเลขระบบ Binary หรือ ฐาน 2) ดังนั้นอักขระ "A" เมื่อแทนค่าเป็นเลขฐาน 2 (Binary) เราจะได้ค่าเป็น 0 1 0 0 0 0 0 1 หรือ 65 ในฐาน 10 (มาจากการบวกน้ำหนักประจำหลักของเลขจำนวนเต็มขนาด 8 บิท0+64+0+0+0+0+0+1 = 65 หรือ ที่เราจะเรียกมันว่า ASCII Code ไงล่ะครับพี่น้อง) ... เอาล่ะครับติ๊ต่างว่าเรารู้ที่มาของ ASCII กันเป็นที่เรียบร้อยแล้ว ดังนั้นค่า ASCII Code สำหรับตัวอักขระ 0 - 9 คือ

"0" = 0 0 1 1 0 0 0 0 หรือ 48 (ฐาน 10)
"1" = 0 0 1 1 0 0 0 1 หรือ 49 (ฐาน 10)
"2" = 0 0 1 1 0 0 1 0 หรือ 50 (ฐาน 10)
..... ไปเรื่อยๆ ....
"9" = 0 0 1 1 1 0 0 1 หรือ 57 (ฐาน 10)

พอมองเห็นทางสว่างรำไรแล้วใช่มั้ยครับพี่น้อง ... โจทย์ในข้อนี้ตรวจสอบการกดแป้นคีย์บอร์ดเพื่อให้รับค่าเฉพาะตัวเลข ... ดังนั้นแนวคิดแบบหนูน้อยอนุบาลแมวเหมียว คือ หากผู้ใช้กดคีย์ตัวเลขระหว่าง 0 - 9 (แต่ต้องใช้ ASCII Code ระหว่าง 48 ถึง 57) ให้ส่งค่า ASCII Code นั้นๆกลับคืนไป (จะใช้ฟังค์ชั่น Asc, Chr เข้าช่วย ยังไงๆแล้ว ตัวแปลภาษามันก็รู้จัก แต่ ASCII Code เท่านั้นแหละ)

นอกเหนือจากคีย์ที่ว่ามา จะต้องล็อคการกดคีย์ไว้ หรือ เสมือนหนึ่งว่าไม่มีการกดคีย์ใดๆนั่นเอง

มาดูโค้ดกัน ...'/ ---------------------------------------------------------------------------
' ฟังค์ชั่นในการตรวจสอบว่าคีย์ที่กดลงไปนั้นมันเป็น 0 - 9 หรือไม่
' รับค่า KeyAscii จาก TextBox เข้ามาทีละตัว และเช็คค่า ASCII Code
' คืนค่าเลขจำนวนเต็มกลับไป หากเป็นตัวเลขก็คืนค่าตัวมันเองกลับ
' หากไม่ใช่ก็คืนค่ากลับเป็น 0 เสมือนไม่มีการกดคีย์ใดๆนั่นเอง
Function CheckDigitOnly(ByVal index As Integer) As Integer
'/ ---------------------------------------------------------------------------
      Select Case index
            Case 48 To 57 ' เลข 0 - 9
            Case 8, 13 ' Backspace = 8, Enter = 13
            Case Else
                index = 0
      End Select
      CheckDigitOnly = index
    End Functionฟังค์ชั่นสามัญประจำโปรแกรมที่จะต้องมี

มาดูวิธีการเรียกใช้งาน ...
'/ ---------------------------------------------------------------------------
' โปรแกรมย่อยเหตุการณ์ (Event) ในการรับค่าการกดคีย์บนแป้นคีย์บอร์ดทีละตัว
Private Sub Text1_KeyPress(KeyAscii As Integer)
'/ ---------------------------------------------------------------------------
    ' ส่งค่า KeyAscii ที่กดลงไปบนคีย์แต่ละตัว ไปให้กับฟังค์ชั่น CheckDigitOnly และส่งค่ากลับมา
    ' หากเป็นตัวเลขก็จะคืนค่า Ascii Code 48 - 57 (หรือคีย์ 0 - 9) กลับคืนมา
    ' หากไม่ใช่ ก็จะคืนค่า 0 กลับมา เสมือนว่าไม่มีการกดคีย์ใดๆเลย
    KeyAscii = CheckDigitOnly(KeyAscii)
End Sub

หน้า: [1]
ดูในรูปแบบกติ: [VB6] การป้อนค่าใน TextBox เพื่อให้รับค่าได้เฉพาะตัวเลขเท่านั้น