Home > Visual Basic .NET > Coding4Ever Advanced TextBox

Coding4Ever Advanced TextBox

Project baru kebetulan harus saya kerjakan menggunakan Visual Basic .NET dan untuk menghemat kode-kode yang enggak produktif terutama yang berhubungan dengan proses input (khususnya TextBox) seperti proses enter, validasi huruf/angka, pemisah ribuan, dan perubahan warna objek pada saat focus/lost focus akhirnya saya sempatkan waktu untuk membuat komponen ini.

Jadi dengan menggunakan komponen ini menurut perkiraan saya (berarti masih bisa salah :D ) bisa menghemat kode yang enggak berguna  sampai 10-20 %.

Untuk saat ini fitur tambahannya masih minim sih, tapi…. lumayan lah :D

  1. Conversion ada 2 pilihan Normal dan UpperCase, jika dipilih UpperCase otomatis input menggunakan huruf besar.
  2. Numeric Only
  3. Letter Only
  4. Thousand Separator/pemisah ribuan, untuk fitur ini masih ada kekurangan yaitu belum mendukung digit decimal.
  5. Auto Enter, agar fitur ini berfungsi dengan baik maka harus diatur terlebih dulu properties TabIndexnya
  6. EnterFocusColor
  7. LeaveFocusColor
  8. SelectionText

Oke kita lihat dulu demonya

klo udah kita masuk ke bagian dalamnya

Imports System.Drawing
Imports System.Windows.Forms

<ToolboxBitmap(GetType(AdvancedTextbox), "AdvancedTextbox.bmp")> _
Public Class AdvancedTextbox
    Inherits System.Windows.Forms.TextBox

#Region ">> Enumerators <<"

    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
    Public Enum EConversion
        Normal = 0
        UpperCase = 1
    End Enum

#End Region

#Region ">> Declarations <<"

    Private mEnterFocusColor As Color = Color.White
    Private mLeaveFocusColor As Color = Color.White

    Private mIsSelectionText As Boolean = False
    Private mIsThousandSeparator As Boolean = False
    Private mIsNumericOnly As Boolean = False
    Private mIsLetterOnly As Boolean = False
    Private mIsAutoEnter As Boolean = False
    Private mIsDecimal As Boolean = False

    Private mConversion As EConversion

#End Region

#Region ">> Properties <<"

    Public Overrides Property MaxLength() As Integer
        Get
            Return MyBase.MaxLength
        End Get

        Set(ByVal value As Integer)
            If Me.mIsThousandSeparator AndAlso value > 15 Then value = 15
            MyBase.MaxLength = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property EnterFocusColor() As Color
        Get
            Return mEnterFocusColor
        End Get

        Set(ByVal value As Color)
            mEnterFocusColor = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property LeaveFocusColor() As Color
        Get
            Return mLeaveFocusColor
        End Get

        Set(ByVal value As Color)
            mLeaveFocusColor = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property SelectionText() As Boolean
        Get
            Return mIsSelectionText
        End Get

        Set(ByVal value As Boolean)
            mIsSelectionText = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property ThousandSeparator() As Boolean
        Get
            Return mIsThousandSeparator
        End Get

        Set(ByVal value As Boolean)
            mIsThousandSeparator = Value

            If mIsThousandSeparator Then
                mIsNumericOnly = True
                Me.MaxLength = 15
                Me.TextAlign = HorizontalAlignment.Right
                Me.Text = "0"
            End If
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property NumericOnly() As Boolean
        Get
            Return mIsNumericOnly
        End Get

        Set(ByVal value As Boolean)
            mIsNumericOnly = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property LetterOnly() As Boolean
        Get
            Return mIsLetterOnly
        End Get

        Set(ByVal value As Boolean)
            mIsLetterOnly = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property AutoEnter() As Boolean
        Get
            Return mIsAutoEnter
        End Get

        Set(ByVal value As Boolean)
            mIsAutoEnter = Value
        End Set
    End Property

    <System.ComponentModel.Category("AdvancedTextbox Properties")> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> _
    Public Property Conversion() As EConversion
        Get
            Return mConversion
        End Get

        Set(ByVal value As EConversion)
            mConversion = Value
        End Set
    End Property

#End Region

#Region ">> Private Function <<"

    Private Function ValidasiAngka(ByVal e As System.Windows.Forms.KeyPressEventArgs) As Boolean
        Dim strValid As String = "0123456789"

        If Not mIsThousandSeparator Then strValid += "."

        If Strings.InStr(strValid, e.KeyChar) = 0 And Not (e.KeyChar = Strings.Chr(Keys.Back)) Then
            Return True ' not valid
        Else
            Return False ' valid
        End If

    End Function ' ValidasiAngka

    Private Function ValidasiHuruf(ByVal e As System.Windows.Forms.KeyPressEventArgs) As Boolean
        Dim strValid As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. "

        If Strings.InStr(strValid, e.KeyChar) = 0 And Not (e.KeyChar = Strings.Chr(Keys.Back)) Then
            Return True ' not valid
        Else
            Return False ' valid
        End If

    End Function ' ValidasiHuruf

    Private Function HurufBesar(ByVal e As System.Windows.Forms.KeyPressEventArgs) As Char
        Return CChar(e.KeyChar.ToString().ToUpper())
    End Function ' HurufBesar

    Private Sub SeleksiText(ByVal sender As System.Windows.Forms.TextBox)
        With sender
            .SelectionStart = 0
            .SelectionLength = .Text.Length
        End With
    End Sub

#End Region

#Region ">> Control Events <<"

    Private Sub AdvancedTextbox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
        If Me.mIsSelectionText Then Call SeleksiText(CType(sender, System.Windows.Forms.TextBox))
        Me.BackColor = Me.mEnterFocusColor
    End Sub

    Private Sub AdvancedTextbox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        If Me.mIsAutoEnter Then If e.KeyChar = Strings.Chr(Keys.Return) Then SendKeys.Send ("{Tab}")

        If Me.mIsNumericOnly Then
            If mIsDecimal AndAlso e.KeyChar = "." Then
                e.Handled = True
            Else
                e.Handled = ValidasiAngka(e)
            End If

        ElseIf Me.mIsLetterOnly Then
            If Me.mConversion = EConversion.UpperCase Then e.KeyChar = HurufBesar(e)
            e.Handled = ValidasiHuruf(e)

        ElseIf Me.mConversion = EConversion.UpperCase Then
            e.KeyChar = HurufBesar(e)
        End If
    End Sub

    Private Sub AdvancedTextbox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Leave
        If Me.mIsNumericOnly Then If Not (Me.Text.Length > 0) Then Me.Text = "0"
        Me.BackColor = Me.mLeaveFocusColor
    End Sub

    Private Sub AdvancedTextbox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.TextChanged

        mIsDecimal = False

        Dim index As Integer = Me.Text.IndexOf(".")
        mIsDecimal = Not (index < 0)

        If Me.mIsNumericOnly AndAlso Me.mIsThousandSeparator Then
            If Me.Text.Length > 0 Then
                If Me.Text.Substring(0, 1) = "." Then Me.Text = Me.Text.Replace(".", "")

                Dim x As Long = CLng(Me.Text.Replace(",", ""))
                Dim strAfterFormat As String = Strings.FormatNumber(x, 0)

                If Me.Text <> strAfterFormat Then
                    Dim pos As Integer = Me.Text.Length - Me.SelectionStart

                    Me.Text = strAfterFormat
                    If ((Me.Text.Length - pos) < 0) Then
                        Me.SelectionStart = 0
                    Else
                        Me.SelectionStart = Me.Text.Length - pos
                    End If
                End If
            End If
        End If
    End Sub

#End Region

End Class

Referensi : Extended TextBox Component Class – VB.Net

Selamat MENCOBA :)

  1. yudhi
    December 12, 2010 at 8:56 am | #1

    wih mantap..thanks..
    banyakin om tentang vb.net nya

    • December 12, 2010 at 1:46 pm | #2

      Pengennya sih, tapi lagi kehabisan ide nih mau posting apa :D

    • yudhi
      December 16, 2010 at 10:28 am | #3

      mau tanya, bagaimana cara menghilangkan [][] pada saat menyimpan data di texbox (multiline).

      Mohon pencerahannya.

      thanks

      • December 17, 2010 at 2:50 am | #4

        Yang mana om ya? Sy udah coba normal-normal aja, tinggal di set true ajakan property Multilinenya.

        • yudhi
          December 20, 2010 at 9:12 am | #5

          yup…klo itu sih udah bisa..tapi klo disimpan ke database..misal yang disimpan dlm textbox tersebut Yudhi..pas di lihat didatabase dan kita tampilin ke texbox hasilnya jadi Yudhi[][]..seperti itu maksud saya..nah tanda[][] itu gimana cara ngilanginnya..

          • December 20, 2010 at 9:42 am | #6

            Coba dihilangkan waktu menampilkan aja, ex var alamat ada karakter [][] :

            Debug.Print(Alamat.Replace(vbCrLf, ""))
            

            Selamat mencoba :)

  2. jack
    December 18, 2010 at 12:15 pm | #7

    mas tanya nk e book vb.Net Punya nggk… pengen belajar ki… tapi yang bahasa indonesia aj ya.. soale nk bahasa laennya agk du**l je :-)

  3. made
    March 23, 2011 at 7:19 am | #9

    mas itu sepertinya bisa untuk currency yah, (10,250,000), bisa kasih link downloadnya atau ke email saya. thq sebelumnya

  4. made
    March 23, 2011 at 7:37 am | #11

    mas untuk penggunaanya bagaimana yah (ThousandSeparator), masih newbie nih.

    • March 23, 2011 at 7:53 am | #12

      Tinggal set aja properties ThousandSeparator = true

      • made
        March 26, 2011 at 3:06 am | #13

        terima kasih mas , propertynya saat dimana nih mas, waktu KeyPress atau saat TextChanged.

        • March 26, 2011 at 5:41 am | #14

          Ya diset langsung aja om di propertiesnya enggak perlu lewat kode, coba lihat lagi gambar ini, di bagian kanan cari properties ThousandSepartor set nilainya menjadi true (nilai defaultnya false).

          • made
            March 26, 2011 at 6:07 am | #15

            terima kasih om, jadi ini ud jadi component, n satu lagi om, untuk menyimpannya koq masih dalam format separator yah, untuk kembali ke nilai normal bagaimana yah. sekali lagi terima kasih banget, akhir saya menemukan yang seperti ini.

            • March 26, 2011 at 7:05 am | #16

              Coba seperti ini om :

              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                  Dim harga As Integer = CInt(AdvancedTextbox1.Text)
                  MessageBox.Show (harga.ToString())
              End Sub
              

              Jadi yg dipanggil pada saat menyimpan adalah variabel harganya.

              Selamat mencoba :)

  5. made
    March 31, 2011 at 8:46 am | #17

    TERIMA KASIH OM, SDH BISA SMOGA ADA BALASANNYA.

  6. adi
    May 4, 2011 at 1:07 am | #18

    Mas Bisa bantu untuk membuat Log Activity di VB 6..?

    • May 4, 2011 at 1:25 am | #19

      Maksudnya gimana om ? Mau buat aplikasi sejenis Keylogger ya? Klo iya udah banyak samplenya kok

  7. made
    November 11, 2011 at 4:06 am | #20

    OM Saya mau tanya untuk pembulatan bagaimana yah caranya, misalnya saya punya angka 2,666,666 menjadi 2,700,000 dan kalau untuk 2,133,333 menjadi 2,200,000, mohon solusinya OM.

    • November 11, 2011 at 6:42 am | #21

      Coba ini om :

      Private Function PembulatanKeatas(ByVal nilai As Integer) As Integer
          Dim hasil As Integer
          Dim lengthNumber As String
          Dim pembagi As String
      
          Try
              lengthNumber = CStr(Len(CStr(nilai)) - 2)
              pembagi = "1" & New String("0", CShort(lengthNumber))
      
              hasil = nilai Mod CInt(pembagi)
      
              If hasil > 0 Then nilai += CInt(pembagi) - hasil
      
              Return nilai
      
          Catch ex As Exception
              Return 0
          End Try
      End Function
      
      Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
          Dim nilai As Integer
          
          nilai = 2666666
          Debug.Print (nilai & " -> " & PembulatanKeatas(nilai))
          
          nilai = 2133333
          Debug.Print (nilai & " -> " & PembulatanKeatas(nilai))
      End Sub
      

      Itu bukan algoritma pembulatan standar, tapi baru hasil coba2x saja jadi klo hasilnya ngawur harap maklum :D .

  8. made
    November 11, 2011 at 7:56 am | #22

    OK OM, Cukup mewakili untuk sementara, memang saya butuh pembulatannya di ratusan ribu, terima kasih banget om.

  9. made
    November 11, 2011 at 8:07 am | #24

    OM kalau fungsi bawaan .Net tidak ada yah, selain roundup itu, sorry om banyak tanya

  10. AKBAR
    January 26, 2012 at 2:48 am | #26

    Bang mau tanya deklarasi seperti ini _ fungsi nya buat apa si ?

  11. AKBAR
    January 26, 2012 at 2:49 am | #27

    ” _”

  12. AKBAR
    January 26, 2012 at 2:52 am | #28

    baris ke 4 bang maksud saya…

  13. Fajar
    February 9, 2012 at 8:33 pm | #30

    maaf bang saya mw tnya bagian ini maksudnya apa ya?? saya masih newbie nh bang butuh pemahaman >,<

    Dim strValid As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    If Strings.InStr(strValid, e.KeyChar) = 0 And Not (e.KeyChar = Strings.Chr(Keys.Back)) Then
    Return True
    Else
    Return False
    End If

    • February 10, 2012 at 8:16 am | #31

      Intinya kode diatas untuk validasi karakter yg diinputkan, hanya karakter yg terdaftar dalam variabel strValid yang bisa diinputkan

  14. Fajar
    February 10, 2012 at 1:13 pm | #32

    owh? dan di bagian if string.instr itu apa bang maksudnya??? itu library dari string atau apa bang??

    karya blognya bagus2 bang :-D

    • February 10, 2012 at 2:20 pm | #33

      InStr itu fungsi bawaan vb6 yg ditambahkan di vb .net gunanya untuk mendapatkan posisi karakter.

      Sub Main()
      	Dim strValid As String = "abcdefghijklmnopqrstuvwxyz"
      
      	' output = 2, index posisi dimulai dari 1
      	Console.WriteLine(Strings.InStr(strValid, "b"))
      
      	' output = 0 karena 1 tidak terdaftar dlam var strValid
      	Console.WriteLine(Strings.InStr(strValid, "1"))
      	Console.ReadKey()
      End Sub
      
  15. guntur
    March 13, 2012 at 3:27 pm | #34

    Bagaimana caranya nambah componen advance textbox ke project??

    • March 14, 2012 at 9:07 am | #35

      1. Klik kanan toobox -> choose item
      2. Aktifkan tab .NET Framework Component kemudian browse lokasi file Coding4Ever.AdvancedTextbox.dll

  16. March 17, 2012 at 4:49 pm | #36

    Yang tuk vb 6 ada gak mas admin komponen ya …..??

    • March 17, 2012 at 6:52 pm | #37

      Ada om, textbox yg dipake Smart Library School mempunyai fitur yg sama dg Coding4Ever Advanced TextBox.

      Nama komponennya MyTextBox.ocx

      • March 18, 2012 at 8:28 am | #38

        wah thaks buanget om…. Semoga ilmu yg disampaikan om admin mendapatkan balasan yg berkah dari ALLOH SWT …..aammiieennn….

        Sekali lg thaks ya om ….. :)

        • March 18, 2012 at 9:41 am | #39

          Oke om sama-sama :)

          • March 19, 2012 at 10:59 am | #40

            om admin, combo sama tanggal ya pake komponen apa mas yg di smart library school

            • March 22, 2012 at 10:41 am | #41

              Pake komponen NeoCalendar om

              • March 22, 2012 at 2:26 pm | #42

                Trial ya om …. klw yg combo ya guna’in komponen apa om ?

                • March 22, 2012 at 2:46 pm | #43

                  Iya om, tapi biasalah udah di cr*ck :D

                  Klo untuk combonya pake combo biasa cuma diflatin

                  • March 22, 2012 at 2:55 pm | #44

                    Gimana om cara cr*ck ya, terus cara flat combo ya …..dr td coba” jajal ttp bingung ….:-)

                    • March 23, 2012 at 5:42 am | #45

                      Ya jelas bingung om, sy salah ngasih link ternyata contonnya pake C# :D

                      Klo yg VB 6 disini.

  17. March 27, 2012 at 2:18 pm | #46

    Sory om, sya msh blm paham ….bisa gak om admin yg ksh contoh ya …. :)

    • March 27, 2012 at 2:38 pm | #47

      Yg namanya kode itu ya bingungin om klo enggak dicoba langsung

      • March 27, 2012 at 4:14 pm | #48

        udah dicoba tp hasilnya beda dng combo punya aplikasi smart library om….

  18. March 28, 2012 at 11:45 am | #51

    om klw error kyk gini apa ya maksudnya error gambar

  19. March 28, 2012 at 11:49 am | #52

    Salah link om sory , ini maksudnya …

  20. tomoey
    April 25, 2012 at 8:18 pm | #53

    thank pak postingan anda sangat membantu……
    baru kali ini saya mlihat admin yg bener” ngasih service yg sgt memuaskan..

    kayaknya saya akan sering” nongkrong disini…. :)

    sukses slalu bwt bapak…..

    • April 27, 2012 at 9:34 am | #54

      ngasih service yg sgt memuaskan..

      Kalimat di atas kok kesannya saru ya ? :D

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s