|
หลักการและทฤษฎี:
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
คัดลอกไปที่คลิปบอร์ด
|
|