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

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

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

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583

หลักการและทฤษฎี:
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 เท่านั้นแหละ)

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

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

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


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

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

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

GMT+7, 2024-11-27 21:27 , Processed in 0.142843 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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