none
Procedimiento unico para generar eventos en controles especificos en vb.net RRS feed

  • Pregunta

  • Explicare mas a detalle, necesitaría un código  que cuando se genere el evento keypress en ciertos textbox(NO todos) de un formulario este mismo no me permita escribir letras...

    Este código que muestro a continuación me serviría si solo tuviera unos pocos texbox pero debo tener mas de 300 y necesitaría un procedimiento que pueda abarcar todos los texbox q necesito(descartando algunos específicos) y generar tanto el evento como el código dentro del evento, nose si logre expresarme bien, pero como pueden observar es un tanto engorroso lo que pido y soy conciente de ello, pero hacer una validación de solo numeros para casi 400 textbox se darán cuenta lo tedioso que puede ser y tiempo es lo que no dispongo lamentablemente.

     Private Sub Txtcantidad_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Txtcantidad.KeyPress
            If Char.IsNumber(e.KeyChar) Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
                MsgBox("Solo admite numeros", vbExclamation, "Atencion")
            End If
    
        End Sub

    Desde ya muchas gracias

    lunes, 26 de agosto de 2019 15:04

Respuestas

  • Hola

    con tu misma rutina redirecciona el evento KeyPess  a la misma y podrás utilizarla sin repetir codigo

     Private Sub TxtNumericos_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox5.KeyPress, TextBox3.KeyPress, TextBox1.KeyPress 
            If Char.IsNumber(e.KeyChar) Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
                MsgBox("Solo admite numeros", vbExclamation, "Atencion")
            End If
    
        End Sub

    el el Handles  agregas todos los textbo que requieras con numero

    para este caso en especifico

    • Marcado como respuesta Ultimatux miércoles, 28 de agosto de 2019 10:42
    martes, 27 de agosto de 2019 13:45

Todas las respuestas

  • hola

    porque tienes un diseño de 300 textbox ? no evaluaste algun otro diseño como ser el uso de un ListBox al cual le vas agregando los valores desde un unico textbox o no se quizas un DataGridView

    Igualmente por codigo podrias adjuntar el evento si usas

    List(Of TextBox) ctrls = Me.Controls.OfType(Of TextBox)().ToList();
    
    For Each ctrl As TextBox In ctrls
    
        AddHandler ctrl.KeyPress, AddressOf Txtcantidad_KeyPress
    
    Next


    Si pones los textbox en un Panel podrias usar Panel1.Controls en lugar de los textbox del form usando Me.Controls

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 26 de agosto de 2019 18:28
  • Muchas gracias por tu respuesta Leandro, paso a comentarte que uso esa cantidad de textbox porque estoy desarrollando una encuesta estadística y tiene que ser idéntica a la que se realizo en papel, por otro lado en cuanto al código que pasaste, si no es mucha molestia, me podrías explicar la linea que esta dentro del for each y añado que no estoy entendiendo en donde debería poner el fragmento de código que solo permite números.. Gracias por tu  tiempo

    * Por lo que puedo entender el código que pasaste afectaría a todos los textbox que existen en el contenedor o form  pero en mi caso necesitaria por dar un ejemplo: textbox1 solo acepte numérico, el texbox2 permita alfanumérico, el texbox3 permita numérico, espero poder explicarme bien.

    • Editado Ultimatux martes, 27 de agosto de 2019 11:03
    martes, 27 de agosto de 2019 10:57
  • Hola

    con tu misma rutina redirecciona el evento KeyPess  a la misma y podrás utilizarla sin repetir codigo

     Private Sub TxtNumericos_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox5.KeyPress, TextBox3.KeyPress, TextBox1.KeyPress 
            If Char.IsNumber(e.KeyChar) Then
                e.Handled = False
            ElseIf Char.IsControl(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
                MsgBox("Solo admite numeros", vbExclamation, "Atencion")
            End If
    
        End Sub

    el el Handles  agregas todos los textbo que requieras con numero

    para este caso en especifico

    • Marcado como respuesta Ultimatux miércoles, 28 de agosto de 2019 10:42
    martes, 27 de agosto de 2019 13:45