none
Digitar solo numeros se puede hacer una función? RRS feed

  • Pregunta

  • Hola

    Tengo la siguiente dificultad, 

            If InStr("0123456789", e.KeyChar) = False Then

                MessageBox.Show("Solo elementos numericos")

                e.Handled = True

            End If

    Este codigo lo necesito poner en varios textbox para realizar validaciones, pero trate de hacer una función en el mismo formulario y también en un modulo hacer un procedimiento de este codigo para ser llamado simplemente pero me arroja error en "e" me dice que no la he declarado, o no es un argumento. Pregunta: Eso se puede hacer o necesariamente debo poner todo el codigo en cada textbox.

    Gracias



    Gracias, WebLatina Con muchas ganas de aprender
    sábado, 17 de octubre de 2009 4:10

Respuestas

Todas las respuestas

  • hola


    creo que usar la funcion de IsDigit() es mas simple que el InStr


    que evento estas utilizando para esta validaciones, verifica que sea el evento KeyPress?


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 17 de octubre de 2009 4:18
  • Hola Leandro

    Si exacto está en keypress, pero quisiera hacer una función que la llamara desde el evento key press de cualquier textbox y me validara. Pero tendria que utilizar algo para cancelar que no fuera e.Handled porque me dice que "e" no es valido. En conclusión quiera ahorar codigo y no tener que escribir en cada textbox esto.

    ok voy a intentarlo con isDigit
    Gracias, WebLatina Con muchas ganas de aprender
    sábado, 17 de octubre de 2009 4:23
  • Hola Leandro

    Trate de implementar isDigit

     If e.KeyChar.IsDigit(e.KeyChar) Then
                e.Handled = False
            ElseIf e.KeyChar.IsControl(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
      End If

    Pero sale este error Acceso de miembro compartido, miembro de constante ........

    Gracias, WebLatina Con muchas ganas de aprender
    sábado, 17 de octubre de 2009 4:40
  • Si lo crees conveniente, échale un vistazo al procedimiento «TeclaPresionada» que encontrarás en el siguiente enlace:

    http://groups.google.es/group/microsoft.public.es.dotnet.vb/browse_thread/thread/453946958729ca8b/972fe4f10363d270?lnk=gst&q=TeclaPresionada+author:softja%C3%A9n&rnum=1&hl=es#972fe4f10363d270


    Enrique Martínez [MS MVP - VB]
    sábado, 17 de octubre de 2009 10:26
    Moderador
  • Hola Enrique

    Te cuento que si hago

     

    Private Sub TeclaPresionada( _

     

    ByRef sender As Object, _

     

    ByRef e As System.Windows.Forms.KeyPressEventArgs, _

    en un modulo + mi codigo igual me sale error cancel no es un miembro de System.Windows.Form.keypressEventArgs.

    Lo que quiero es hacer un procedimiento o funcion en un modulo ej

    funticion revisanumero

    si es numero entonces
      continue
    sino
      entonces
      pare
    fin de si

    fin de funcion

    y poder llamar a esta funcion desde cualquier evento keypress de cualquier textbox para que me valide si son números o no lo que ingresan.

    cordialmente,
     


    Gracias, WebLatina Con muchas ganas de aprender
    sábado, 17 de octubre de 2009 12:31
  • Pero como utilizo cancel, ahi me saca error
    Gracias, WebLatina Con muchas ganas de aprender
    sábado, 17 de octubre de 2009 12:33
  • ¿Pero a qué «Cancel» te refieres?

    Desde luego, si en el procedimiento «TeclaPresionada» estás intentando ejecutar algo parecido a

             e.Cancel = True

    es normal que obtengas la excepción «Cancel no es un miembro de System.Windows.Form.KeypressEventArgs», porque dicha clase no tiene ninguna propiedad llamada «Cancel».

    Para cancelar el evento KeyPress del control TextBox, tienes que establecer el valor True a la propiedad «Handled» del parámetro « e »:

            ' No se ha pulsado un dígito. 
            e.Handled = True


    Enrique Martínez [MS MVP - VB]
    sábado, 17 de octubre de 2009 13:58
    Moderador
  • hola

    Si lo que necesitas es hacer una función entonces el e.KeyVhar no podrás usarlo directamente en este método, debes paraselo como parámetro para que pueda ser evaluado y retornar un valor


    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

    e.Handled = Validacion(e.KeyChar)
    End Sub
    Private Function Validacion(letra As Char) As Boolean

       If letra.IsDigit(e.KeyChar) Then
    Return False
    ElseIf letra.IsControl(e.KeyChar) Then
    Return False
    Else
    Return True
    End If
    End Function


    Como veras en el ejemplo tanto e.KeyChar y el e.Handled quedaron en el evento solo sus valores o asignaciones son pasadas a la funcion

    No se si esto es exactamente lo que estabas buscando pero por ahi da una pista para que lo logres.
    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 17 de octubre de 2009 14:04