PERTAMA
ada yang "cukup" makae function bawaan VB, isnumeric(). Biasanya ditaroh di event lostfocus() atau di event validate(). contoh codingnya mungkin begini :
Private Sub Entri_LostFocus(Index As Integer)
If IsNumeric(Entri(Index).Text) = False Then
MsgBox "Sori, input cuman boleh angka doank!", _
vbCritical, "Pesan"
Entri(Index).SetFocus
End If
End Sub
cara ini punya ciri : pencegahan inputan selain angka dilakukan *setelah* user mengisikan nilai textbox (ngetikin textboxnya).. dan untuk proses validasinya, perlu dilakukan 2 kali : sekali di event lostfocus/validate, dan *musti* di cek sekali lagi pas event tombol simpan di klik (misalnya). Klo ngga gtu, masih ada peluang untuk kelolosan tuh...
KEDUA
ada juga yang nyoba nge-trap inputan pada event textbox_keypress()
caranya dengan cuman mengijinkan karakter dengan kode ascii tertentu yang bisa diketikin di dalam tu textbox. contoh codingnya seperti ini :
Private Sub Entri_KeyPress(Index As Integer, _
KeyAscii As Integer)
If Not ((KeyAscii >= Asc("0") And _
KeyAscii <= Asc("9") Or _
KeyAscii = vbKeyBack)) Then
Beep KeyAscii = 0
End If
End Sub
cara ini cukup shiepp.. apalagi bisa dimodifikasi dengan nambahin list-exclusion karakter yang boleh diijinin utk diketik di dalam textbox (misal : tanda koma ato tanda titik)
KETIGA
Ada lagi cara laen yang memanfaatkan API, dimana *secara paksa* textbox akan di-inisialisasi-kan hanya bisa nerima input angka thox. Kebutuhan dasar pemanggilan API Calls-nya seperti ini (udah kubuatkan function nya sekalian jadi tinggal make' doank)
'-- di module :
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Public Function SetNumerik(NamaControl As Control, _
Optional Flag As Boolean = True) As Long
Dim curstyle As Long
curstyle = GetWindowLong(NamaControl.hWnd, GWL_STYLE)
If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
SetNumerik = SetWindowLong(NamaControl.hWnd, _
GWL_STYLE, curstyle)
NamaControl.Refresh
End Function
'-- contoh pemanggilan di form, cukup di FORM_LOAD doank.. :
Public Sub Form_Load()
SetNumerik entri(0)
SetNumerik Entri(1)
End Sub
Cara ini, tampaknya keren dan mudah. Emang sih! Tapi tetep ada aja konsekuensinya... textbox (ato combo, maskedit juga bisa) akan *bener2* cuman bisa nerima inputan angka. Ngga bs custom, ngijinin titik ato koma utk nulis pemisah desimalnya.
Saturday, July 25, 2009
Validasi Input Numerik Vb.6
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment