เราสามารถกำหนด Textbox ให้รับเฉพาะภาษาไทยเท่านั้น ได้ไหมคะ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

13 พ.ย. 67 , 20:50:16
อ่าน 220 ครั้ง

มาลี

หนูอยากได้เป็นคำสั่งโค๊ดนะคะ ไม่อยากได้แบบกำหนด input mask ค่ะ
เพราะต้องการจะใส่ข้อความเตือน และ คำสั่งอื่นๆต่อไปอีกค่ะ

ประมาณว่า

หากผู้ใช้เผลอคีย์ข้อความที่ไม่ไช่ภาษาไทยเข้าไป ก็จะให้มีข้อความเตือนขึ้นมา และ อื่นๆ

ขอบคุณค่ะอาจารย์
« แก้ไขครั้งสุดท้าย: 13 พ.ย. 67 , 20:55:39 โดย มาลี »

 

14 พ.ย. 67 , 11:42:32
ตอบกลับ #1
หลักการเบื้องต้น
1.ต้องค่า text box ได้ว่าพอโฟกัสมาที่ object นี้แล้วจะให้เป็นภาษาอะไร keyboard language มีให้เลือก thai/eng หรือ system (ค่าภาษาที่แอคทีฟขณะนั้น)
2. เขียนฟังก์ชัน นำค่าใน text มาวนลูปเช็ค array ไปทีละตัวว่าไม่พบ a-z ให้ผลลัพธืเป็นจริงหรือเท็จ

 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

15 พ.ย. 67 , 04:06:59
ตอบกลับ #2

มาลี

 :shout: เย้...ทำได้ตามที่ต้องการแล้ว
ขอบพระคุณมากเลยค่ะอาจารย์ ขออภัยที่เข้ามารายงานผลล่าช้าหน่อยนะคะ

 

15 พ.ย. 67 , 11:12:28
ตอบกลับ #3

Un

โค๊ด: [Select]
Private Sub TextBox1_AfterUpdate()
     Dim i As Integer
     Dim strText As String
     Dim strMessage As String
     strText = Me.TextBox1.Value
     For i = 1 To Len(strText)
           If Asc(Mid(strText, i, 1)) < 128 Then
                strMessage = "กรุณาพิมพ์เฉพาะภาษาไทยเท่านั้น"
                MsgBox strMessage, vbExclamation, "ข้อผิดพลาด"
                Me.TextBox1.SetFocus
                Exit Sub
           End If
     Next i
End Sub

ตัวอักษรที่ไม่ใช่ภาษาไทย (ที่มี ASCII code น้อยกว่า 128)
ลองอีกแบบนึงครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

15 พ.ย. 67 , 14:12:08
ตอบกลับ #4

มาลี

ว้า..ว เยี่ยมเลยค่ะอาจารย์ UN
โค๊ดสั้นเข้าใจง่ายสามารถดัดแปลงเพิ่มเติมได้ง่ายดีค่ะ
แต่ติดตรงที่ว่า เวลาใส่ตัวเลขภาษาไทย มันก็ไม่ยอมให้ผ่านด้วย แต่ก็โอเคแล้ว ไม่ซีเรียสเรื่องตัวเลขค่ะอาจารย์
เพราะช่องข้อความที่ต้องการให้ใส่นั้น ก็ไม่มีข้อมูลตัวเลขอยู่แล้ว
แต่สมมติหากสามารถอนุญาตให้ใส่ตัวเลขไทยได้ด้วย ก็จะสามารถนำไปประยุกต์ใช้กับข้อมูลที่อยู่ของลูกค้าได้้ด้วยค่ะ

 

19 พ.ย. 67 , 16:30:14
ตอบกลับ #5

UnKnown

ตัวเลขภาษาไทย ASCII อยู่ในช่วง 240-249 ตามโค้ดอาจารย์ UN ใช้ได้นะครับ

แต่ถ้าตัวเลข 0-9 นั้น ASCII อยู่ในช่วง 48-57 แก้โค้ดประมาณนี้ครับ
โค๊ด: [Select]
Private Sub TextBox1_AfterUpdate()
     Dim i As Integer
     Dim strText As String
     Dim strMessage As String
     strText = Me.TextBox1.Value
     For i = 1 To Len(strText)
           If Asc(Mid(strText, i, 1)) < 48 Then
                strMessage = "กรุณาพิมพ์เฉพาะภาษาไทยเท่านั้น"
                MsgBox strMessage, vbExclamation, "ข้อผิดพลาด"
                Me.TextBox1.SetFocus
                Exit Sub

           ElseIf Asc(Mid(strText, i, 1)) > 57 Then
                If Asc(Mid(strText, i, 1)) < 128 Then
                strMessage = "กรุณาพิมพ์เฉพาะภาษาไทยเท่านั้น"
                MsgBox strMessage, vbExclamation, "ข้อผิดพลาด"
                Me.TextBox1.SetFocus
                Exit Sub
                End If
           End If
     Next i
End Sub
:ninja:     ลองคิด,ลองทำแนวคนไม่เก่งแอคเซส
หมายเหตุ เพื่อความปลอดภัยโปรดสำรองข้อมูลใว้ก่อนการแก้ไข
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un, มาลี

21 พ.ย. 67 , 11:37:56
ตอบกลับ #6

มาลี

จากการทดสอบโค๊ดของอาจารย์ UnKnown แล้วพบว่า
หากใส่ภาษาไทย หรือตัวเลข เพียงอย่างใดอย่างหนึ่ง โอเค มันปล่อยให้ผ่านได้ค่ะ
ส่วนภาษาอังกฤษนั้นมันจับได้ไม่ยอมให้ผ่าน อันนี้โอเคเลย

แต่หากใส่เป้นภาษาไทยร่วมกับตัวเลข อันนี้มันก็จะไม่ยอมให้ผ่านด้วยค่ะ เช่น

บ้านเลขที่ 25/3 ตำบลตัวอย่าง
หรือ
บ้านเลขที่ ๒๕/๓ ตำบลตัวอย่าง

ไม่ว่าจะเป็นเลขไทยหรือเลขอังกฤษก็ให้ผลแแบบเดียวกันคือไม่ยอมให้ผ่านค่ะ
พยายามลองแกะดัดแปลงแก้ไขโค๊ดแล้ว แต่ยังไม่สำเร็จเลยค่ะ
ขอรบกวนท่านด้วยนะคะ

 

21 พ.ย. 67 , 12:31:07
ตอบกลับ #7

UnKnown

กรณีบ้านเลขที่ 21,22 หรือ 22/1-2 เพื่อให้ใช้ , - / และช่องว่าง(spacebar) ได้แก้ตรงโค้ดใหม่ประมาณนี้ครับ

โค๊ด: [Select]
Private Sub TextBox1_AfterUpdate()
     Dim i As Integer
     Dim strText As String
     Dim strMessage As String
     strText = Me.TextBox1.Value
     For i = 1 To Len(strText)
           If Asc(Mid(strText, i, 1)) < 44 Then
                If Asc(Mid(strText, i, 1)) <> 32 Then
                strMessage = "กรุณาพิมพ์เฉพาะภาษาไทยเท่านั้น"
                MsgBox strMessage, vbExclamation, "ข้อผิดพลาด"
                Me.TextBox1.SetFocus
                Exit Sub
                End If

           ElseIf Asc(Mid(strText, i, 1)) > 57 Then
                If Asc(Mid(strText, i, 1)) < 128 Then
                strMessage = "กรุณาพิมพ์เฉพาะภาษาไทยเท่านั้น"
                MsgBox strMessage, vbExclamation, "ข้อผิดพลาด"
                Me.TextBox1.SetFocus
                Exit Sub
                End If
           End If
     Next i
End Sub



ปล.ดูจาก ตาราง Ascii ภาษาไทย อังกฤษ แล้วเพื่อใช้พวกวงเล็ป(),เครื่องหมายคำพูด "..." และอื่นๆอีกไม่กี่ตัวก็แก้โค้ดแรกตรง < 48 เดิมมาเป็น < 32 ไปเลยไม่ต้องมาซ้อน if เพิ่มแบบอันใหม่นี้  :prettiness:
« แก้ไขครั้งสุดท้าย: 21 พ.ย. 67 , 20:48:00 โดย UnKnown »
:ninja:     ลองคิด,ลองทำแนวคนไม่เก่งแอคเซส
หมายเหตุ เพื่อความปลอดภัยโปรดสำรองข้อมูลใว้ก่อนการแก้ไข
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un, มาลี

22 พ.ย. 67 , 11:04:16
ตอบกลับ #8

มาลี

 :shout: เย้..โค๊ดใหม่นี้ตอบโจทย์ได้ครบถ้วนเลยค่ะอาจารย์ UnKnown
ขอบพระคุณอย่างยิ่งนะคะ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5