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&#59;), 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

[0] Índice de Mensajes

Ir a la versión completa