• Viernes 8 de Noviembre de 2024, 20:11

Autor Tema:  Problema Con Una Funcion De Validación  (Leído 1361 veces)

karolarivero

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Problema Con Una Funcion De Validación
« en: Viernes 20 de Julio de 2007, 03:07 »
0
Hola a todos:

tengo la siguiente funcion, que valida que un textbox acepte solo 3 digitos despues de la coma:

Código: Text
  1.  
  2.  
  3. Function NumeroDec(ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal Text As TextBox) As Integer
  4.  
  5.             Dim dig As Integer = Len(Text.Text & e.KeyChar)
  6.             Dim a, esDecimal, NumDecimales As Integer
  7.             Dim esDec As Boolean
  8.             ' se verifica si es un digito o un punto
  9.             If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," Then
  10.                 e.Handled = False
  11.             ElseIf e.KeyChar.IsControl(e.KeyChar) Then
  12.                 e.Handled = False
  13.                 Return a
  14.             Else
  15.                 e.Handled = True
  16.             End If
  17.             ' se verifica que el primer digito ingresado no sea un punto al seleccionar
  18.             If Text.SelectedText <> "" Then
  19.                 If e.KeyChar = "," Then
  20.                     e.Handled = True
  21.                     Return a
  22.                 End If
  23.             End If
  24.             If dig = 1 And e.KeyChar = "," Then
  25.                 e.Handled = True
  26.                 Return a
  27.             End If
  28.             'aqui se hace la verificacion cuando es seleccionado el valor del texto
  29.             'y no sea considerado como la adicion de un digito mas al valor ya contenido en el textbox
  30.             If Text.SelectedText = "" Then
  31.                 ' aqui se hace el for para controlar que el numero sea de dos digitos - contadose a partir del punto decimal.
  32.                 For a = 0 To dig - 1
  33.                     Dim car As String = CStr(Text.Text & e.KeyChar)
  34.                     If car.Substring(a, 1) = "," Then
  35.                         esDecimal = esDecimal + 1
  36.                         esDec = True
  37.                     End If
  38.                     If esDec = True Then
  39.                         NumDecimales = NumDecimales + 1
  40.                     End If
  41.                     ' aqui se controla los digitos a partir del punto numdecimales = 4 si es de dos decimales
  42.                     If NumDecimales >= 5 Or esDecimal >= 2 Then
  43.                         e.Handled = True
  44.                         'car.su()
  45.                     End If
  46.                 Next
  47.             End If
  48.         End Function
  49.  
  50.  

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
  1.  
  2.  
  3. If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "," Then
  4.                 e.Handled = False
  5.  
  6.  

la cambie por:

Código: Text
  1.  
  2.  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
  3.                 e.Handled = False
  4.  
  5.  

Se aceptan suguerencias, gracias y saludos
MCRS

x_reaccion

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Problema Con Una Funcion De Validación
« Respuesta #1 en: Viernes 20 de Julio de 2007, 05:10 »
0
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
  1.  
  2.         Dim i As Integer
  3.         Dim tmp As String() = TextBox1.Text.Split(New Char() {","})
  4.  
  5.         If System.Int32.TryParse(tmp(0), i) Then
  6.             'comprobamos las comas sean 2
  7.             If tmp.Length = 2 Then
  8.                 'comprobamos que sea numerico
  9.                 If System.Int32.TryParse(tmp(1), i) Then
  10.                     'solo aceptaremos 3 decimales, los demas los eliminaremos
  11.                     If tmp(1).Length > 3 Then
  12.                         'eliminamos
  13.                         tmp(1) = tmp(1).Remove(3, tmp(1).Length - 3)
  14.                         'concatenamos
  15.                         TextBox1.Text = String.Concat(tmp(0), ",", tmp(1))
  16.                         'nos mantenemos en el final
  17.                         TextBox1.SelectionStart = TextBox1.Text.Length
  18.                     End If
  19.                 Else
  20.                     'no es numerico el valor decimal
  21.                 End If
  22.                 'comprobamos que las comas sean mayor a una
  23.             ElseIf tmp.Length > 2 Then
  24.                 'hay mas de 1 coma ( esto no nos sirve lo eliminaremos&#59;), concatenando.
  25.                 TextBox1.Text = String.Concat(tmp(0), ",", tmp(1))
  26.                 'nos mantenemos en el final
  27.                 TextBox1.SelectionStart = TextBox1.Text.Length
  28.             End If
  29.         Else
  30.             'no es numerico el valor real
  31.         End If
  32.  
  33.  

Pd: Modificalo a tu gusto ( si te sirve ).
u.u no quiero cumplir 20 T_T