CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Problema Con Una Funcion De Validación
(1/1)
karolarivero:
Hola a todos:
tengo la siguiente funcion, que valida que un textbox acepte solo 3 digitos despues de la coma:
--- Código: Text --- Function NumeroDec(ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal Text As TextBox) As Integer Dim dig As Integer = Len(Text.Text & e.KeyChar) Dim a, esDecimal, NumDecimales As Integer Dim esDec As Boolean ' se verifica si es un digito o un punto If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," Then e.Handled = False ElseIf e.KeyChar.IsControl(e.KeyChar) Then e.Handled = False Return a Else e.Handled = True End If ' se verifica que el primer digito ingresado no sea un punto al seleccionar If Text.SelectedText <> "" Then If e.KeyChar = "," Then e.Handled = True Return a End If End If If dig = 1 And e.KeyChar = "," Then e.Handled = True Return a End If 'aqui se hace la verificacion cuando es seleccionado el valor del texto 'y no sea considerado como la adicion de un digito mas al valor ya contenido en el textbox If Text.SelectedText = "" Then ' aqui se hace el for para controlar que el numero sea de dos digitos - contadose a partir del punto decimal. For a = 0 To dig - 1 Dim car As String = CStr(Text.Text & e.KeyChar) If car.Substring(a, 1) = "," Then esDecimal = esDecimal + 1 esDec = True End If If esDec = True Then NumDecimales = NumDecimales + 1 End If ' aqui se controla los digitos a partir del punto numdecimales = 4 si es de dos decimales If NumDecimales >= 5 Or esDecimal >= 2 Then e.Handled = True 'car.su() End If Next End If End Function
Pero ahora tengo que validar que acepte o solo numeros con 3 decimales o "NA"
o sea, si el primer digito es un numero lo que deberia venir es solo numero con 3 decimales y si el primer digito es el caracter "n" entonces lo que viene es "a" y lo deberia aceptar una sola vez
Hice un pequeño arreglo a la funcion, pero pasa lo siguiente:
.- si escribes así: "nnnnnn" ó "aaaaaaaaaa" lo acepta y no es la idea
.- si escribes así: "nananananana" tambien lo acepta y no es la idea
.- si escribes: "3na3n6a" lo acepta y no es la idea
Lo que se quiere es: si el primer digito es un numero lo que deberia venir es solo numero con 3 decimales y si el primer digito es el caracter "n" entonces lo que viene es "a" ejemplo: ó es 3,456 ó na ó NA
El arreglo fue, esta linea:
--- Código: Text --- If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," Then e.Handled = False
la cambie por:
--- Código: Text --- If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," or e.KeyChar = "n" or e.KeyChar = "a" e.KeyChar = "N" or e.KeyChar = "A" Then e.Handled = False
Se aceptan suguerencias, gracias y saludos
x_reaccion:
Hola
Tengo una duda.
¿Es realmente necesario que el usuario ponga NA luego de la coma si no tiene decimales el valor real?
Si no es necesario (tal vez) te pueda servir esto que acabo de hacer :
--- Código: Text --- Dim i As Integer Dim tmp As String() = TextBox1.Text.Split(New Char() {","}) If System.Int32.TryParse(tmp(0), i) Then 'comprobamos las comas sean 2 If tmp.Length = 2 Then 'comprobamos que sea numerico If System.Int32.TryParse(tmp(1), i) Then 'solo aceptaremos 3 decimales, los demas los eliminaremos If tmp(1).Length > 3 Then 'eliminamos tmp(1) = tmp(1).Remove(3, tmp(1).Length - 3) 'concatenamos TextBox1.Text = String.Concat(tmp(0), ",", tmp(1)) 'nos mantenemos en el final TextBox1.SelectionStart = TextBox1.Text.Length End If Else 'no es numerico el valor decimal End If 'comprobamos que las comas sean mayor a una ElseIf tmp.Length > 2 Then 'hay mas de 1 coma ( esto no nos sirve lo eliminaremos;), concatenando. TextBox1.Text = String.Concat(tmp(0), ",", tmp(1)) 'nos mantenemos en el final TextBox1.SelectionStart = TextBox1.Text.Length End If Else 'no es numerico el valor real End If
Pd: Modificalo a tu gusto ( si te sirve ).
Navegación
Ir a la versión completa