Principales respuestas
Como mostrar respuestas automáticas en un textbox

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
Respuestas
-
Saludos Royer12, como sugerencia:
- Deja solo un "Sub" y que maneje el evento de ambos controles.
- Usa el evento TextChanged en vez de KeyUp porque KeyUp se ejecutará cada vez que sueltes una tecla, aunque esta tecla sea "Flecha arriba".
- 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
-
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
-
>>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.EmptyEnd 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
Todas las respuestas
-
Saludos Royer12, como sugerencia:
- Deja solo un "Sub" y que maneje el evento de ambos controles.
- Usa el evento TextChanged en vez de KeyUp porque KeyUp se ejecutará cada vez que sueltes una tecla, aunque esta tecla sea "Flecha arriba".
- 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
-
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
-
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.
-
>>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.EmptyEnd 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
-
>>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.EmptyEnd If End Sub