Limitar enteros y decimales en textbox vb.net

Que tal experto tengo una duda, he sabido limitar un textbox para q escriba o solo puros enteros o caracteres... Asi como tambien limitarlo para cierta cantidad el problema es que quisiera que limitara que me escribiera hablando ya especificamente en puros enteros (3 enteros y 2 decimales) obvio con un solo punto que seria el delimitador para q despues de eso solo 2 enteros... Tengo un codigo que puedo limitar la cantidad de decimales... Y tmb en cuanto se ponga punto q 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

1 respuesta

Respuesta
-1
No se cual version de VB estes usando pero parece que es una version .NET y no VB6, yo te recomendaria usar un MaskedTextBox que sin usar nada de codigo hace lo que quieres, solo agrega el Control y en las opciones del mismo en SetMask, Usa la plantilla Custom y en el cuadro Mask pon esto &quot;999.99&quot;
Y se delimitara a 3 enteros, un punto y 2 decimales. Sin usar nada de codigo :D
que tal, si pero el problema que un maskedtextbox a la hora de insertar los valores... si le doy click en una parte del maskedtextbox que no sea el comienzo por ejemplo el masked esta asi:
___.__ digamos que asi son 3 enteros y 2 decimales.. si doy un click adelantito donde iria el 2do entero por ejemplo aki _I__.__ ahi donde esta la I si doy click puedo comenzar a escribir y hay raza tan tonta que si da click en donde estan los decimales pueden escribir y me daria problemas de validacion por que no estoy forzando a que escriba completamente como va todo... tambien si digamos pongo puros decimales asi: 000.98 me agarra como entero 98 osea que ps es un rollo con el masked compa :(
Hice algunas pruebas y creo q este codigo hace lo q quieres:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim tb As TextBox = DirectCast(sender, TextBox)
Dim PosPunto As Integer
If e.KeyChar = &quot;.&quot;c Then
tb.MaxLength = 6
tb.Text += &quot;.&quot;
PosPunto = tb.Text.IndexOf(&quot;.&quot;)
e.KeyChar = &quot;&quot;
tb.Select(tb.TextLength, 1)
e.Handled = True
End If
PosPunto = InStr(tb.Text, &quot;.&quot;)
If PosPunto > 0 Then
tb.MaxLength = 6
Else
tb.MaxLength = 3
End If
End Sub
amigo esta excelente tu codigo!!!! el problema :( es que admite varios puntos.. es q decir si desde el inicio pone punto puede abortar el programa y marcar error :( seria excelentisisisisisimo que solo admitiera 1 solo punto despues de los 3 enteros... y si solo kieren decimales ps q los obligue a poner los 3 enteros aunque sea 000.98 :D por favor si se podra eso amigo???? de vdd t agradezco tanto tu ayuda!
Ahorita estoy en la oficina, pero en la hora de comida lo checo, si se me ocurre algo, solo hay q probar.
que onda experto disculpa paso vario tiempo que paso finalmente si pudiste observar el detalle que habia faltado por fa? :) :)
¿Y xq el forzar los 3 enteros?
Podrias darle formato algo asi:
Me.TextBox1.Value = Format(Me.TextBox1.Value, &quot;00#.00&quot;)
Por lo del punto, solo es validar q si escribe mas de una vez el punto, despues del primer punto ya no lo escriba, en el evento KeyPress podrias ponerlo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas