Posting ini saya buat untuk menyempurnakan source code saya sebelumnya. Hasilnya :
- Textbox hanya bisa menerima input angka.
- Textbox hanya bisa diinput dengan 1 huruf pemisah desimal (koma atau titik).
- Textbox hanya bisa diinput huruf minus (-) jika textbox masih kosong.
- Textbox akan otomatis memberikan pemisah ribuan. (seperti kalkulator windows jika diaktifkan fitur digit grouping)
Untuk mencoba source code berikut, anda cukup menambahkan 1 buah textbox ke dalam form. Selanjutnya, tinggal dipastekan pada bagian source code form tersebut. Berikut adalah source codenya :
Option Strict On Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.TextBox1.TextAlign = HorizontalAlignment.Right Me.TextBox1.MaxLength = 20 End Sub Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress Select Case e.KeyChar Case CChar(vbBack) 'JIKA TOMBOL BACKSPACE e.Handled = False 'LANJUT INPUT Case "0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c 'JIKA TOMBOL 0-9 e.Handled = False Case "-"c 'JIKA TOMBOL - (MINUS) If Me.TextBox1.Text.Contains("-"c) = True Then 'JIKA TEXTBOX SUDAH PUNYA HURUF MINUS e.Handled = True 'STOP INPUT Else 'JIKA TEXTBOX BELUM ADA HURUF MINUS If Me.TextBox1.Text = String.Empty Then 'JIKA TEXTBOX MASIH KOSONG e.Handled = False 'LANJUT INPUT HURUF MINUS Else 'JIKA BELUM ADA HURUF MINUS TAPI SUDAH ADA ANGKA e.Handled = True 'STOP INPUT HURUF MINUS End If End If Case CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) 'JIKA TOMBOL PEMISAH DESIMAL 'JIKA SUDAH ADA HURUF PEMISAH DESIMAL If Me.TextBox1.Text.Contains(CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)) = True Then e.Handled = True 'STOP INPUT Else 'JIKA BELUM ADA HURUF PEMISAH DESIMAL If Me.TextBox1.Text = String.Empty Then 'JIKA TEXTBOX MASIH KOSONG '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 'JIKA BELUM ADA HURUF PEMISAH DESIMAL TAPI SUDAH ADA ANGKA e.Handled = False 'LANJUT INPUT End If End If Case CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator) 'JIKA TOMBOL PEMISAH RIBUAN 'JIKA SUDAH ADA HURUF PEMISAH DESIMAL If Me.TextBox1.Text.Contains(CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)) = True Then e.Handled = True 'STOP INPUT Else 'JIKA BELUM ADA HURUF PEMISAH DESIMAL If Me.TextBox1.Text = String.Empty Then 'JIKA TEXTBOX MASIH KOSONG '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 'JIKA BELUM ADA HURUF PEMISAH DESIMAL TAPI SUDAH ADA ANGKA e.KeyChar = CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) 'LANJUT INPUT TAPI HURUFNYA DIUBAH End If End If Case Else 'JIKA BUKA TOMBOL BACKSPACE, 0-9, -, PEMISAH DESIMAL, PEMISAH RIBUAN e.Handled = True 'STOP INPUT End Select End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged If Me.TextBox1.Text <> String.Empty Then 'JIKA TEXTBOX BERISI 'HILANGKAN PEMISAH RIBUAN DULU Dim temp As String = Me.TextBox1.Text.Replace(System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator, String.Empty) 'JIKA SUDAH ADA HURUF PEMISAH DESIMAL (ANGKA KOMA) If temp.Contains(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) = True Then 'BAGI MENJADI 2 BAGIAN Dim xxx() As String = temp.Split(CChar(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)) 'ISI TEXTBOX DENGAN BAGIAN KE-1 YANG DIFORMAT SEHINGGA ADA PEMISAH RIBUAN KEMUDIAN DIGABUNG DENGAN KOMA DAN BAGIAN KE-2 Me.TextBox1.Text = CDec(xxx(0)).ToString("N0") & System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator & xxx(1) 'PINDAHKAN CURSOR KE BAGIAN BELAKANG TEXT Me.TextBox1.Select(Me.TextBox1.Text.Length, 0) ElseIf Me.TextBox1.Text = "-"c Then 'TIDAK LAKUKAN APA-APA KARENA MERUPAKAN INPUT MINUS PERTAMA Else 'JIKA BELUM ADA HURUF PEMISAH DESIMAL (ANGKA KOMA) Me.TextBox1.Text = CDec(temp).ToString("N0") 'ISI TEXTBOX DENGAN ISI TEXTBOX YG SUDAH DIFORMAT Me.TextBox1.Select(Me.TextBox1.Text.Length, 0) 'PINDAHKAN CURSOR KE BELAKANG TEXT End If End If End Sub End Class
Penjelasan :
- Pada method Form1_Load, property textAlign pada textbox di set menjadi rata kanan dan jumlah huruf yang bisa di terima textbox tersebut adalah 20 dengan tujuan untuk menghindari error konversi ke tipe angka (desimal) jika huruf yang diinput lebih banyak dari 20 buah.
- Pada method TextBox1_KeyPress, source code berfungsi untuk membatasi input yang bisa diterima yakni angka, huruf pemisah desimal dan huruf minus. Fungsi ini sudah pernah dibahas pada posting saya sebelumnya.
- Pada method TextBox1_TextChanged, source code berfungsi untuk menampilkan pemisah ribuan ketika kita mengetik.
Demikan pembahasan ini. Jika ada yang kurang dipahami atau mau bertanya atau muncul error ketika dicoba, silakan beri komentar pada bagian bawah berikut. Silahkan dicoba dan semoga berhasil. ^_^
ko untuk menjumlah textbox1 dengan textbox2 malah tergabung ? Tolong dong mas
BalasHapusMungkin masalah tipe data yakni string sehingga hasilnya tergabung. Coba convert ke tipe data numerik (bisa menggunakan CInt atau Cdbl atau fungsi konversi yang lainnya.
BalasHapusContoh :
Dim aaa as Double = 0
aaa = Cdbl(Me.TextBox1.Text) + Cdbl(Me.TextBox2.Text)
MessageBox.Show(aaa)
Terima kasih Pak.
Hapus