none
Como mostrar respuestas automáticas en un textbox RRS feed

  • Pregunta

  • Hola, tengo tres TextBox con nombre txt_a, txt_b, txt_respuesta, ahora cuando escribo en el txt_a, y en el txt_b quiero que muestre el resultado automáticamente en txt_respuesta.

    estoy haciendo este codigo, pero siento que no esta muy preciso y arroja otro resultado, y doble es asi

    dim doble as Double
    Private Sub txt_a_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp
    
            If txt_a.TextLength <> 0 And txt_b.TextLength <> 0 Then
                If Double.TryParse(txt_a.Text, doble) And Double.TryParse(txt_b, doble)  Then
                    txt_respuesta.Text = txt_a.Text - txt_b.Text
    
                End If
            End If
            
        End Sub
    
        Private Sub txt_b_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_b.KeyUp
    
            If txt_b.TextLength <> 0 And txt_a.TextLength <> 0 Then
                If Double.TryParse(txt_b.Text, doble) And Double.TryParse(txt_a, doble)  Then
                    txt_respuesta.Text = (txt_a.Text - txt_b.Text
     
                End If
            End If
        End Sub
    
       
    Apreciaría mucho su respuesta

    jueves, 1 de noviembre de 2018 16:49

Respuestas

  • Saludos Royer12, como sugerencia:

    1. Deja solo un "Sub" y que maneje el evento de ambos controles.
    2. Usa el evento TextChanged en vez de KeyUp porque KeyUp se ejecutará cada vez que sueltes una tecla, aunque esta tecla sea "Flecha arriba".
    3. Usa variables para realizar la resta, no restes la propiedad Text, mejor asigna text a variables como a y b y luego réstalas

    Para que ambos controles compartan el evento solo especifícalo en Handles:

    Private Sub txtabTextChanged(sender As Object, e As KeyEventArgs) Handles txt_a.TextChanged, txt_b.TextChanged

    Prueba y avísanos.

    • Propuesto como respuesta Pablo Rubio jueves, 1 de noviembre de 2018 17:22
    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:05
  • Hola Yerald Mora , acabo de hacer lo que dijiste y funciona perfectamente:

    Private Sub validar()
        dim a, b, resultado as Double
        a = 0
        b =0
        resultado = 0
    
       If txt_a.TextLength <> 0 And txt_b.TextLength <> 0 Then
    
                If Double.TryParse(txt_a.Text, doble) And Double.TryParse(txt_b, doble)  Then
                    a = txt_a.Text
                    b = txt_b.Text
                    resultado = a - b
                    txt_respuesta.Text = resultado
    
                End If
            End If
            
    
    End Sub
    
    Private Sub txt_a_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp
    
            validar()
        End Sub
    
        Private Sub txt_b_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_b.KeyUp
    
           validar()
     
                End If
            End If
        End Sub
    

    ¿Esta Bien?, el código que has escrito, no lo había entendido y si fuera posible, podrías explicarme? 

    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:27
  • >>el código que has escrito, no lo había entendido y si fuera posible, podrías explicarme? 

    El código que te deje nada mas era para que tanto txt_a y txt_b usaran el mismo código para su evento (click al link para mas info), verás "Private Sub txt_a_KeyUp" nada mas es la declaración de un proceso como tu "Validar()", ahora bien "(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp" con esto le defines que ese proceso se trata de un manejador de evento, es decir ejecutará las instrucciones contenidas en el "sub" cuando txt_a.KeyUp sea activado, por lo que en realidad como se llame el evento es indistinto, "Private Sub txt_a_KeyUp" puede ser "Private Sub textoAFlechaLevantada" y no cambiará en nada su funcionalidad, por defecto los eventos de controles se generan con formato: nombrecontrol_nombreevento, tu le puedes cambiar el nombre y eso fue lo único que hice, y le dije que serviría tanto para txt_a y txt_b separando los eventos por comas "Handles txt_a.TextChanged, txt_b.TextChanged" , por lo que si tu deseas puedes dejar tu resta en tu bloque "Validar" porque se trata del mismo tipo de control y el mismo evento

    Private Sub validar(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp
    'Acá el resto de tu código
    End Sub

    También te recuerdo que Double.TryParse no solo verifica si se puede convertir el dato a double sino que ya te asigna el resultado a la variable es decir si haces Double.TryParse(txt_a.Text, a) habrás validado que txt_a.Text sea correcto y que tu variable a ya quede incializada, prueba esto:

    Private Sub Validar(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp Dim a, b As Double If Double.TryParse(txt_a.Text, a) And Double.TryParse(txt_b.Text, b) Then txt_respuesta.Text = a - b

    Else
                txt_respuesta.Text = String.Empty

    End If End Sub



    • Editado Yerald Mora jueves, 1 de noviembre de 2018 18:03
    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:58

Todas las respuestas

  • Saludos Royer12, como sugerencia:

    1. Deja solo un "Sub" y que maneje el evento de ambos controles.
    2. Usa el evento TextChanged en vez de KeyUp porque KeyUp se ejecutará cada vez que sueltes una tecla, aunque esta tecla sea "Flecha arriba".
    3. Usa variables para realizar la resta, no restes la propiedad Text, mejor asigna text a variables como a y b y luego réstalas

    Para que ambos controles compartan el evento solo especifícalo en Handles:

    Private Sub txtabTextChanged(sender As Object, e As KeyEventArgs) Handles txt_a.TextChanged, txt_b.TextChanged

    Prueba y avísanos.

    • Propuesto como respuesta Pablo Rubio jueves, 1 de noviembre de 2018 17:22
    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:05
  • Hola Yerald Mora , acabo de hacer lo que dijiste y funciona perfectamente:

    Private Sub validar()
        dim a, b, resultado as Double
        a = 0
        b =0
        resultado = 0
    
       If txt_a.TextLength <> 0 And txt_b.TextLength <> 0 Then
    
                If Double.TryParse(txt_a.Text, doble) And Double.TryParse(txt_b, doble)  Then
                    a = txt_a.Text
                    b = txt_b.Text
                    resultado = a - b
                    txt_respuesta.Text = resultado
    
                End If
            End If
            
    
    End Sub
    
    Private Sub txt_a_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp
    
            validar()
        End Sub
    
        Private Sub txt_b_KeyUp(sender As Object, e As KeyEventArgs) Handles txt_b.KeyUp
    
           validar()
     
                End If
            End If
        End Sub
    

    ¿Esta Bien?, el código que has escrito, no lo había entendido y si fuera posible, podrías explicarme? 

    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:27
  • Hola     Royer12

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te recomiendo ir al siguiente enlace en el cual consiste en un caso similar al que nos estas reportando y donde explica como  poder aplicar  en tu código.


    Gracias por usar los foros de MSDN.

    Pablo Rubio

     _____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 1 de noviembre de 2018 17:27
  • >>el código que has escrito, no lo había entendido y si fuera posible, podrías explicarme? 

    El código que te deje nada mas era para que tanto txt_a y txt_b usaran el mismo código para su evento (click al link para mas info), verás "Private Sub txt_a_KeyUp" nada mas es la declaración de un proceso como tu "Validar()", ahora bien "(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp" con esto le defines que ese proceso se trata de un manejador de evento, es decir ejecutará las instrucciones contenidas en el "sub" cuando txt_a.KeyUp sea activado, por lo que en realidad como se llame el evento es indistinto, "Private Sub txt_a_KeyUp" puede ser "Private Sub textoAFlechaLevantada" y no cambiará en nada su funcionalidad, por defecto los eventos de controles se generan con formato: nombrecontrol_nombreevento, tu le puedes cambiar el nombre y eso fue lo único que hice, y le dije que serviría tanto para txt_a y txt_b separando los eventos por comas "Handles txt_a.TextChanged, txt_b.TextChanged" , por lo que si tu deseas puedes dejar tu resta en tu bloque "Validar" porque se trata del mismo tipo de control y el mismo evento

    Private Sub validar(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp
    'Acá el resto de tu código
    End Sub

    También te recuerdo que Double.TryParse no solo verifica si se puede convertir el dato a double sino que ya te asigna el resultado a la variable es decir si haces Double.TryParse(txt_a.Text, a) habrás validado que txt_a.Text sea correcto y que tu variable a ya quede incializada, prueba esto:

    Private Sub Validar(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp Dim a, b As Double If Double.TryParse(txt_a.Text, a) And Double.TryParse(txt_b.Text, b) Then txt_respuesta.Text = a - b

    Else
                txt_respuesta.Text = String.Empty

    End If End Sub



    • Editado Yerald Mora jueves, 1 de noviembre de 2018 18:03
    • Marcado como respuesta Pablo Rubio jueves, 15 de noviembre de 2018 16:53
    jueves, 1 de noviembre de 2018 17:58
  • >>el código que has escrito, no lo había entendido y si fuera posible, podrías explicarme? 

    El código que te deje nada mas era para que tanto txt_a y txt_b usaran el mismo código para su evento (click al link para mas info), verás "Private Sub txt_a_KeyUp" nada mas es la declaración de un proceso como tu "Validar()", ahora bien "(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp" con esto le defines que ese proceso se trata de un manejador de evento, es decir ejecutará las instrucciones contenidas en el "sub" cuando txt_a.KeyUp sea activado, por lo que en realidad como se llame el evento es indistinto, "Private Sub txt_a_KeyUp" puede ser "Private Sub textoAFlechaLevantada" y no cambiará en nada su funcionalidad, por defecto los eventos de controles se generan con formato: nombrecontrol_nombreevento, tu le puedes cambiar el nombre y eso fue lo único que hice, y le dije que serviría tanto para txt_a y txt_b separando los eventos por comas "Handles txt_a.TextChanged, txt_b.TextChanged" , por lo que si tu deseas puedes dejar tu resta en tu bloque "Validar" porque se trata del mismo tipo de control y el mismo evento

    Private Sub validar(sender As Object, e As KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp
    'Acá el resto de tu código
    End Sub

    También te recuerdo que Double.TryParse no solo verifica si se puede convertir el dato a double sino que ya te asigna el resultado a la variable es decir si haces Double.TryParse(txt_a.Text, a) habrás validado que txt_a.Text sea correcto y que tu variable a ya quede incializada, prueba esto:

    Private Sub Validar(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_a.KeyUp, txt_b.KeyUp Dim a, b As Double If Double.TryParse(txt_a.Text, a) And Double.TryParse(txt_b.Text, b) Then txt_respuesta.Text = a - b

    Else
                txt_respuesta.Text = String.Empty

    End If End Sub



    Es muy interesante funciona, bueno me surge otra duda y es que valida los datos y almacena en la variable solo numeros, pero en txt_a tambien se puede escribir letras y para que haga efecto la resta tienes que borrarlos. De todas formas gracias
    viernes, 2 de noviembre de 2018 0:18