Rabu, 24 Desember 2014

Validasi Penulisan Angka Desimal pada Textbox dengan VB.NET

Posting ini merupakan gabungan source code pada posting-an saya sebelumnya yakni Membatasi Textbox agar bisa diInput Angka saja dengan VB.NET, Mengubah Huruf Koma dan Titik menjadi Huruf Pemisah Desimal dengan VB.NET dan Membatasi Huruf diInput 2 kali atau lebih pada Textbox dengan VB.NET. Dengan 3 dasar tersebut, kita dapat membuat validasi pada textbox agar bisa diinput angka desimal saja (angka yang memiliki komponen desimal / pecahan). Agar tampilan-nya bagus, set property TextAlign pada textbox menjadi Right atau set programmatically dengan perintah sebagai berikut :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.TextBox1.TextAlign = HorizontalAlignment.Right
End Sub
Oke tanpa basa basi lagi, berikut adalah source codenya lengkap dengan komentar-komentar agar mudah dipelajari.
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    'JIKA YG DITEKAN TOMBOL ANGKA, BACKSPACE, PEMISAH RIBUAN ATAU PEMISAH DESIMAL
    If IsNumeric(e.KeyChar) = True OrElse _
    e.KeyChar = vbBack OrElse _
    e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator OrElse _
    e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator  Then
        'JIKA TEXTBOX SUDAH MEMILIKI HURUF PEMISAH DESIMAL
        If Me.TextBox1.Text.Contains(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) = True Then
            'JIKA YG DITEKAN ADALAH HURUF PEMISAH RIBUAN ATAU DESIMAL
            If e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator OrElse _
            e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator Then
                e.Handled = True 'STOP INPUT
            Else
                e.Handled = False 'LANJUTKAN INPUT
            End If
        Else 'JIKA BELUM MEMILIKI HURUF PEMISAH DESIMAL
            'JIKA YG DITEKAN ADALAH HURUF PEMISAH RIBUAN ATAU DESIMAL
            If e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator OrElse _
            e.KeyChar = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator Then
                'JIKA TEXTBOX MASIH KOSONG
                If Me.TextBox1.Text = String.Empty Then
                    'TAMBAHKAN O (NOL) DIDEPAN HURUF PEMISAH DESIMAL
                    Me.TextBox1.Text = "0"c & CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
                    'STOP INPUT
                    e.Handled = True
                    'PINDAHKAN CURSOR DITEXTBOX KE BELAKANG TEXT
                    Me.TextBox1.Select(Me.TextBox1.Text.Length, 0)
                Else
                    'UBAH HURUF TERSEBUT MENJADI HURUF PEMISAH DESIMAL
                    e.KeyChar = CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
                End If
            End If
        End If
    Else 'JIKA BUKAN TOMBOL ANGKA, BACKSPACE, PEMISAH RIBUAN ATAU PEMISAH DESIMAL YG DITEKAN
        e.Handled = True 'STOP INPUT
    End If
End Sub
Kekurangan dari source code diatas adalah belum bisa menginput huruf minus (-). Tunggu postingan saya selanjutnya untuk memperbaiki kekurangan tersebut. ^_^

1 komentar: