หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 1 2 4 6 5

7 ธันวาคม พ.ศ.2549
44 Users On-Line.
Visitors - Page views
 8 4 0 5 9 2 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

การจำกัดความยาวของตัวอักษร ที่สามารถกรอกลงในคอนโทรล Combo Box

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 5/11/2549 11:09:00
(อ่าน : 13271) 

โดยตามปกติแล้วใน Visual Basic จะไม่มีคุณสมบัติ (Properties) ในการจำกัดจำนวนของตัวอักษร ที่สามารถกรอกลงในคอนโทรล Combo Box ได้ อย่างที่ทำได้ในคอนโทรล Text Box (ใช้คุณสมบัติ MaxLength) ดังนั้นหากว่าเราจำเป็นที่ต้องการความสามารถดังกล่าว
ก็สามารถเขียนโค้ดขึ้นมาใหม่ เพื่อจัดการได้ โดยการตรวจสอบจำนวนตัวอักษรที่กรอกจากโปรแกรมย่อย (Sub Program หรือ Procedure) ที่เกิดเหตุการณ์ของการกดคีย์ KeyPress ซึ่งถ้าหากว่าจำนวนของตัวอักษรเกินกว่าที่กำหนดเอาไว้แล้ว เราจะทำการกำหนดค่า 0 ให้กับ KeyAscii แทน คือ เสมือนหนึ่งว่าไม่มีการกดคีย์เลยน่ะครับ นอกจากตัวอย่างนี้ที่ผมนำมาเสนอแล้ว คุณๆทั้งหลายสามารถนำการกำหนด KeyAscii = 0 เอาไปประยุกต์ใช้กับโปรแกรมย่อยอื่นๆ ที่ป้องกันการคีย์ค่าผิดได้อีกด้วย อาทิเช่น เราต้องการป้อนค่าเฉพาะตัวเลข 0 ถึง 9 ลงไปในคอนโทรล Text Box เท่านั้น (KeyAscii ที่ใช้คือ 48 - 57) ค่าอื่นๆจะรับเข้ามาไม่ได้ เราก็แค่เอาค่า 0 ตัวนี้ คืนกลับไปให้กับ KeyAscii แค่นี้ก็หมดเรื่องแล้วครับผม อ้าว!!! พล่ามมาซะยาวเฟื้อยเลย ทีนี้ลองมาดูโค้ดจริงๆบ้าง


Option Explicit

Private Sub Combo1_KeyPress(KeyAscii As Integer)

     Const MaxChar As Integer = 5 ' กำหนดค่าคงที่เป็นความยาวตัวอักษรที่จะป้อนให้กับคอนโทรล Combo1 

     If Len(Combo1.Text) >= MaxChar Then ' ถ้าหากมีความยาวมากกว่า หรือ เท่ากับที่ได้ตั้งไว้
         If KeyAscii <> vbKeyBack Then ' เป็นการกดคีย์ Back Space หรือไม่
              KeyAscii = 0 ' ไม่ใช่ให้ถือว่าไม่ได้กดคีย์ใดๆเลย
         End If
    End If
End Sub


ทีนี้ก็ลองมาดูตัวอย่างอีกตัวหนึ่ง ซึ่งผมคิดว่าค่อนข้างจะมีประโยชน์อย่างมาก ในการนำไปใช้งานได้อย่างแท้จริง เพื่อรับค่าเข้ามายังคอนโทรล Text Box โดยรับเฉพาะค่าที่เป็นตัวเลข, คีย์ Back Space และ การกดคีย์ Enter เท่านั้น แต่เราจะนำไปใช้ในรูปแบบของฟังค์ชั่น (มีการส่งค่าไปหาฟังค์ชั่น และ ส่งค่ากลับคืนมาจากฟังค์ชั่นด้วย)

สมมุติจากโปรแกรมย่อยเหตุการณ์ของ Text Box เนื่องจากการกดคีย์ หรือ KeyPress

Sub Text1_KeyPress(KeyAscii As Integer)
    KeyAscii = CheckDigitOnly(KeyAscii) ' ส่งค่า KeyAscii ไป พร้อมกับรับค่าคืนมาให้กับ KeyAscii เอง
End Sub

Function CheckDigitOnly(Index As Integer) As Integer
     Select Case Index
       Case 48 To 57   ' กดคีย์ที่เป็นเลข 0, 1, 2, ... จนถึง 9 (ตัวใดตัวหนึ่งน่ะครับ)
       Case vbKeyBack  ' กดคีย์ Back Space
       Case vbKeyReturn ' กดคีย์ Enter
       Case Else
       MsgBox "รายการนี้ต้องป้อนเฉพาะค่าที่เป็นตัวเลขเท่านั้น.", vbOKOnly + vbExclamation, "รายงานความผิดพลาด" 
           
       Index = 0 ' ไม่ตรงกับเงื่อนไขที่ระบุของการกดคีย์ ให้ส่งกลับเป็นค่า 0 เสมือนว่าไม่มีการกดคีย์ใดๆเกิดขึ้น
     End Select
     CheckDigitOnly = Index ' Return ค่ากลับไป
End Function


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560