Hola a todos:
tengo la siguiente funcion, que valida que un textbox acepte solo 3 digitos despues de la coma:
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:
If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," Then
e.Handled = False
la cambie por:
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