การตรวจจับแป้นพิมพ์ในระดับ Form
การตรวจจับแป้นพิมพ์ในระดับฟอร์ม นั้นเราต้องกำหนด KeyPreview = True KeyPreview เป็นProperties ของฟอร์ม เมื่อผู้ใช้ป้อนข้อมูล VB จะตรวจจับแป้นพิมพ์นี้ก่อน ที่จะไปทำในระดับ Control
เมื่อกดแป้น [ENTER] แล้วให้เลื่อนตำแหน่งป้อนไปยังฟิลด์ถัดไป
โปรแกรมบน Dos ส่วนใหญ่เมื่อ กด ENTER แล้วจะเลื่อนตำแหน่งป้อนไปยังฟิลด์ถัดไป ใน VB ถ้าจะทำต้องกำหนดดังนี้
1. อย่าลืมกำหนด KeyPreview = True
2. ใส่โปรแกรมตรง Form_KeyPress
Private Sub Form_KeyPress(KeyAscii
As Integer)
If KeyAscii = 13 Then
SendKeys "{Tab}"
KeyAscii = 0
End If
End Sub
ถ้าต้องการตรวจจับฟังก์ชั่นคีย์เช่น F1-F12
ถ้าต้องการดักแป้นพิมพ์ฟังก์ชั่นคีย์ ให้ใส่ตรง Form_KeyDown
Private Sub Form_KeyDown(KeyCode
As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF3
Call
SSCmbExit_Click
Case vbKeyF5
Call
SSCmbOK_Click
End Select
End Sub
เมื่ออยู่ที่ฟิลด์แล้ว ต้องการให้ป้อนเฉพาะตัวอักษรที่ต้องการ
ให้เราใส่โปรแกรมตรง KeyPress ของ Control ตัวนั้น เช่นต้องการให้ป้อนเฉพาะตัวเลข
Private Sub
txtInt_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 or KeyAscii > 57 Then
keyascii = 0
End If
End Sub
สำหรับการดักแป้นพิมพ์นี้ผมได้เขียนเป็นฟังก์ชั่นไว้ ชื่อ ValidKeyPress ท่านสามารถ DownLoad ตัวอย่างได้จากบทนำ
ให้ใส่ไว้ที่ KeyPress
โดยมีรูปแบบการใช้ดังนี้
1. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "C", "UPPER")
ป้อนโดยให้ถาษาอังกฤษเป็นตัวใหญ่หมด
2. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "C",
"UPPERABC") ป้อนโดยให้ถาษาอังกฤษABC
3. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "C", "LOWER")
ป้อนโดยให้ถาษาอังกฤษเป็นตัวเล็กหมด
4. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "C",
"LOWERabc") ป้อนโดยให้ถาษาอังกฤษabc
5. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "C", "THADA")
ป้อนได้เฉพาะ T,H,A,D
6. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "N", "+-.")
ป้อนตัวเลขอนุญาติ +,-และจุด
7. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "N", "")
ป้อนตัวเลขอย่างเดียว
8. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "D", "/")
ป้อนวันที่อนุญาติให้พิมพ์ / ได้
9. KeyAscii = ValidKeyPress(KeyAscii, ActiveControl, "D", "")
ป้อนวันที่เฉพาะตัวเลข
ต้องการให้ขึ้นแถบแสงเลือกอักษร (Seleced Text)เมื่อเปลี่ยนฟิลด์
เนื่องจากต้องใช้งานบ่อยควรสร้างเป็นฟังกชั่นเก็บไว้เลย
Private Sub My_SelText()
On Error Resume Next
ActiveControl.SelStart = 0
ActiveControl.SelLength = 65000
End Sub
เมื่อใช้งานต้องใส่ไว้ตรง GotFocus ของ Control ที่ใช้รับข้อมูล เช่น
Private Sub
txtDateB_GotFocus()
Call My_SelText
End Sub
เมื่อต้องการป้อนข้อมูลที่เป็นตัวเลข
การป้อนตัวเลขมีปัญามากพอสมควรใน VB ผมได้พยายามเขียนอยู่ตั้งนาน จนได้ออกมาเป็นรูปแบบนี้ ท่านสามารถ DownLoad ดูได้จากตัวอย่างโปรแกรมได้จากบทนำ
ต้องกำหนดดังนี้
1. กำหนด KeyPreview ของ Form เป็น
True
2. ต้องใส่ Form_KeyPress
Private Sub Form_KeyPress(KeyAscii As
Integer)
If KeyAscii = 13 Then
SendKeys
"{Tab}"
KeyAscii =
0
End If
End Sub
3. กำหนด Alignment ของ TextBox เป็น 1-Right Justify
4. กำหนด MultiLine ของ TextBox ให้เป็น True
5. ตรง GotFocus ของ Textbox ควรใส่ Call My_SelText
ฟังก์ชั่นนี้อยู่ต้นหน้า
6. ตรง KeyPress ของ TextBox ใส่ KeyAscii = ValidKeyPress(KeyAscii,
ActiveControl, "N", "-.") พิมพ์เฉพาะตัวเลข
7. ตรง LostFocus ของ TextBox ใส่
txtINT = Format$(StrToNum(txtINT),
"#,##0.00") หรือ
txtINT = Format$(StrToNum(txtINT), "###0")
ถ้าไม่ต้องการจุด
เมื่อต้องการป้อนข้อมูลที่เป็นวันที่
เนื่องจาก VB ไม่ได้มีการตรวจสอบวันที่ และ ไม่มีการตรวจสอบวันที่ภาษาไทย ผมจึงต้องเขียนขึ้นมาเพื่อไว้ใช้งาน โดยมีดารกำหนดเงื่อนไขการใช้ไว้ดังนี้
1. กำหนด KeyPreview ของ Form เป็น
True
2. ต้องใส่ Form_KeyPress
Private Sub Form_KeyPress(KeyAscii As
Integer)
If KeyAscii = 13 Then
SendKeys
"{Tab}"
KeyAscii =
0
End If
End Sub
3. ตรง GotFocus ของ Textbox ควรใส่ Call My_SelText
ฟังก์ชั่นนี้อยู่ต้นหน้า
4. ตรง KeyPress ของ TextBox ใส่ KeyAscii = ValidKeyPress(KeyAscii,
ActiveControl, "D", "/") ถ้าไม่ให้พิมพ์ / ให้ลบออก
5. ตรง LostFocus ของ TextBox ใส่
txtDateC = ValidDate(txtDateC,
"dd/mm/yyyy") 'เพื่อใช้ปีฝรั่งอักกฤษ
txtDateC = ValidDate(txtDateC,
"mm/dd/yyyy") 'เพื่อใช้ปีฝรั่งอเมริกัน
txtDateC = ValidDate(txtDateC,
"วว/ดด/ปปปป") 'เพื่อใช้ปีของพี่ไทย
อนึ่งถ้าต้องการแปลงสตริงวันที่เป็นตัวแปรวันที่ใช้ StrToDate
เช่น
Dim varDate As Date
varDate = StrToDate(txtDateC, "dd/mm/yyyy")
'เพื่อใช้ปีฝรั่งอักกฤษ
varDate = StrToDate(txtDateC, "วว/ดด/ปปปป")
'เพื่อใช้ปีของพี่ไทย
เมื่อต้องการจัด Format วันที่
VB มีฟังกชั่น Format
เพื่อจัดวันที่ แต่มีปัญหามากคือ ถ้าเรากำหนดที่ Control Panel
ให้เป็นภาษาไทย เราจัดได้เฉพาะภาษาไทย ถ้าเรากำหนดให้เป็นอังกฤษ
ก็จะจัดได้เฉพาะภาษาอังกฤษ ดังนั้นผมไม่ค่อยอยากไปยุ่งเกี่ยวกับ
Control Panel เลยสร้าง DFormat เพื่อที่จะใช้จัด Format
รูปแบบวันที่ให้เป็นได้ทั้ง ภาษาไทย และ ภาษาอังกฤษ
โดยมีรูปแบบดังนี้
กรณีภาษาอังกฤษ
MyStr = DFormat(Date, "dd/mm/yyyy")
'** 13/03/1998.
MyStr = DFormat(Date, "dd-mmm")
'** 13-Mar
MyStr = DFormat(Date, "mmmm
dd, yyyy") '** March 13, 1998".
MyStr = DFormat(Date, "dddd, mmmm d
yyyy") '** Friday, March 13, 1998".
กรณีภาษาไทย
MyStr = DFormat(MyDate,
"วว/ดด/ปปปป") '** 13/03/2541
MyStr = DFormat(MyDate, "ด/ปปปป")
'** 3/2541 ถ้า ด ตัวเดียวจะไม่แสเง 0
หน้าเดือน
MyStr = DFormat(MyDate, "วว-ดดด")
'** 13-มี.ค. ดดด 3ตัวจะแสดงเดือนย่อ
MyStr = DFormat(MyDate, "วว ดดดด
ปปปป") '** 13 มีนาคม 2541
MyStr = DFormat(MyDate, "ดดดด ปปปป")
'** มีนาคม 2541
เมื่อต้องการแปลงวันที่
(Text)
เป็นตัวแปรวันที่
ให้ใช้ฟังก์ชั่น StrToDate
ดังตัวอย่างดังนี้
Dim MyDate as Date
MyDate = StrToDate("13/01/1998", "dd/mm/yyyy")
MyDate = StrToDate("01/13/1998", "mm/dd/yyyy")
MyDate = StrToDate("13/01/2541", "วว/ดด/ปปปป")
มีความรู้สึกเหมือนโค้ดมันเป็นของ vb 6 เลยอ่าเพือ่นๆๆๆ
เอาใหม่ อันนี้เรา เขียนเอง ที่เราใช้นะ ตรวจสอบตัวเลขนะจ๊ะ
Private Sub txtSalary_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSalary.KeyPress
If Not (e.KeyChar >= "0" And e.KeyChar <= "9" Or e.KeyChar = "." Or e.KeyChar = ControlChars.Back) Then
MessageBox.Show("กรุณากรอกข้อมูลเป็นตัวเลข", "โปรดระวัง", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
e.Handled = True
End If
End Sub
๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕๕
ตัวนี้นะ พิมพ์ได้เฉพาะตัวเลข ทศนิยม และสามารถกดลบได้ด้วย
เพราะเห็นว่าบางคนกดลบไม่ได้ตัวนี้ได้นะจ๊ะ
ขอบคุณมากครับพี่
t
ขอบคุณ คุณ acharaมากๆ เลยนะคะ
กำลังหาข้อมูลอยู่พอดี เป็นประโยชน์ และใช้ได้จริงๆคะ >/|\<