ethicalhacker
Well-known member
How can I prevent users from entering characters in a textbox such that only numbers get entered in the textbox?
Public Class TextBoxEx
Inherits System.Windows.Forms.TextBox
Private _allowNegative As Boolean
Private _enterTabbing As Boolean
Private _previousText As String = ""
Public Property allowNegative() As Boolean
Get
allowNegative = _allowNegative
End Get
Set(ByVal value As Boolean)
_allowNegative = value
End Set
End Property
Public Property enterTabbing() As Boolean
Get
enterTabbing = _enterTabbing
End Get
Set(ByVal value As Boolean)
_enterTabbing = value
End Set
End Property
Private ReadOnly Property previousText() As String
Get
previousText = _previousText
End Get
End Property
Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
MyBase.OnKeyPress(e)
If enterTabbing Then
If Asc(e.KeyChar) = 13 And Me.SelectionStart = Me.Text.Length Or Asc(e.KeyChar) = 13 And Me.SelectionLength = Me.Text.Length Then
Me.Parent.SelectNextControl(Me, True, True, False, True)
Exit Sub
End If
End If
If allowNegative Then
If Not IsNumeric(e.KeyChar) Then
If Not e.KeyChar = "." And Not e.KeyChar = "-" And Asc(e.KeyChar) <> 8 Or Me.Text.Contains(".") = True And Asc(e.KeyChar) <> 8 Or Not e.KeyChar = "." And Asc(e.KeyChar) <> 8 And Me.SelectionStart > 0 And e.KeyChar = "-" Then
e.KeyChar = Nothing
End If
End If
Else
If Not IsNumeric(e.KeyChar) Then
If Not e.KeyChar = "." And Asc(e.KeyChar) <> 8 Or Me.Text.Contains(".") = True And Asc(e.KeyChar) <> 8 Then
e.KeyChar = Nothing
End If
End If
End If
End Sub
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
MyBase.OnTextChanged(e)
If allowNegative Then
If Me.Text = "." Or Me.Text = "-" Or Me.Text = "-." Or Me.Text = "" Or IsNumeric(Me.Text) Then
_previousText = Me.Text
Else
Me.Text = previousText
End If
Me.SelectionStart = Me.Text.Length
Else
If Me.Text = "." Or Me.Text = "" Or IsNumeric(Me.Text) Then
_previousText = Me.Text
Else
Me.Text = previousText
End If
Me.SelectionStart = Me.Text.Length
End If
End Sub
End Class