Limitar enteros y decimales en textbox vb.net
Que tal experto tengo una duda, he sabido limitar un textbox para que escriba o solo puros enteros o caracteres... Así como también limitarlo para cierta cantidad el problema es que quisiera que limitara que me escribiera hablando ya específicamente en puros enteros (3 enteros y 2 decimales) obvio con un solo punto que seria el delimitador para que después de eso solo 2 enteros... Tengo un código que puedo limitar la cantidad de decimales... Y también en cuanto se ponga punto que solo permita cierta cantidad... Dejame te lo pongo para si pudieras ayudarme a acomodar solo para los enteros eso no lo logre :( mira es el siguiente en un textbox en el evento keypress:
TextBox17.MaxLength = 6
' Referenciamos el control TextBox que ha desencadeno el evento
'
Dim tb As TextBox = DirectCast(sender, TextBox)
' Carácter separador decimal existente actualmente
' en la configuración regional de windows.
'
Dim separadorDecimal As String = _
Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator
If ((e.KeyChar = "."c) OrElse (e.KeyChar = ","c)) Then
' Si en el control hay ya escrito un separador decimal,
' deshechamos insertar otro separador más.
'
If (tb.Text.IndexOf(separadorDecimal) >= 0) And Not (tb.SelectionLength <> 0) Then
e.Handled = True
Return
Else
If ((tb.TextLength = 0) OrElse (tb.SelectionLength > 0) OrElse _
((tb.TextLength = 1) And (tb.Text.Chars(0) = "-"c))) Then
' Si no hay ningún número, insertamos un cero
' antes del separador decimal.
tb.SelectedText = "0"
End If
' Insertamos el separador decimal.
'
e.KeyChar = CChar(separadorDecimal)
Return
End If
End If
If (Convert.ToInt32(e.KeyChar) = 8) Then
' Se ha pulsado la tecla retroceso
Return
ElseIf (Not (Char.IsDigit(e.KeyChar))) Then
' No se ha pulsado un dígito.
e.Handled = True
Return
End If
' Si existe el separador decimal, no permitimos que
' se escriban más de tres números decimales.
'
Dim index As Integer = tb.Text.IndexOf(separadorDecimal)
If (index >= 0) Then
Dim decimales As String = tb.Text.Substring(index + 1)
e.Handled = (decimales.Length = 3)
End If
' Si el texto del control actualmente está seleccionado,
' Permitimos que se pueda reemplazar por el carácter tecleado.
'
If (tb.SelectionLength > 0) Then e.Handled = False
TextBox17.MaxLength = 6
' Referenciamos el control TextBox que ha desencadeno el evento
'
Dim tb As TextBox = DirectCast(sender, TextBox)
' Carácter separador decimal existente actualmente
' en la configuración regional de windows.
'
Dim separadorDecimal As String = _
Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator
If ((e.KeyChar = "."c) OrElse (e.KeyChar = ","c)) Then
' Si en el control hay ya escrito un separador decimal,
' deshechamos insertar otro separador más.
'
If (tb.Text.IndexOf(separadorDecimal) >= 0) And Not (tb.SelectionLength <> 0) Then
e.Handled = True
Return
Else
If ((tb.TextLength = 0) OrElse (tb.SelectionLength > 0) OrElse _
((tb.TextLength = 1) And (tb.Text.Chars(0) = "-"c))) Then
' Si no hay ningún número, insertamos un cero
' antes del separador decimal.
tb.SelectedText = "0"
End If
' Insertamos el separador decimal.
'
e.KeyChar = CChar(separadorDecimal)
Return
End If
End If
If (Convert.ToInt32(e.KeyChar) = 8) Then
' Se ha pulsado la tecla retroceso
Return
ElseIf (Not (Char.IsDigit(e.KeyChar))) Then
' No se ha pulsado un dígito.
e.Handled = True
Return
End If
' Si existe el separador decimal, no permitimos que
' se escriban más de tres números decimales.
'
Dim index As Integer = tb.Text.IndexOf(separadorDecimal)
If (index >= 0) Then
Dim decimales As String = tb.Text.Substring(index + 1)
e.Handled = (decimales.Length = 3)
End If
' Si el texto del control actualmente está seleccionado,
' Permitimos que se pueda reemplazar por el carácter tecleado.
'
If (tb.SelectionLength > 0) Then e.Handled = False
Respuesta de Elkin Murillo
2
1 respuesta más de otro experto
Respuesta de Roberto Alvarado