none
Comparar dos valores (num enteros) de dos textbox "if Val(Textbox1.text) < Val(Textbox2.Text)"??

    Pregunta

  • Buen día compañeros desarrolladores,

    Tengo algunos textbox en donde ingreso datos numericos y necesito compararlos (menor y mayor que).

    Me explico,

    Tengo un textboxResultado, y otros dos textbox1 y textbox2. El txt1 y txt2 son valores mínimo y máximo respectivamente.

    En el textboxResultado ingreso un número y si es menor que el txt1 o mayor que el txt2, en donde ingreso resultado se debe poner el color de fondo LightCoral, hasta ahí estoy bien

                If Val(txtResultado.Text) < Val(textbox1.Text) Or _
                    Val(txtResultado.Text) > Val(textbox2.Text) Then
    
                    Me.txtResultado.BackColor = Color.LightCoral
    
                Else
                    Me.txtResultado.BackColor = Color.LightCyan
    
                End If

    Ahora, por decir si ingreso un número fuera de los rangos, este textboxResultado se pone color fondo LightCoral (tono de rojo bajito), y si borro este resultado se queda en el mismo color LightCoral, como puedo hacer para que al dejar el resultado vacío después de haber borrado algún número en el resultado, vuelva a su color original que es LightCyan (tono de azul bajito)?

    Nota: cuando tengo un valor mínimo de 0 y X cantidad en máximo, el color original de fondo del textboxResultado LightCyan si vuelve cuando dejo el campo resultado vacío después de haber ingresado y borrar un número, pero si es de 1 a X, se queda en LightCoral

    Dejo un imagen con el ejemplo


    Saludos y gracias por adelantado



    viernes, 31 de marzo de 2017 5:34

Respuestas

  • Juan Ortiz T,

    Intenta hacer lo siguiente:

    Private Sub txtResultado_TextChanged(sender As Object...
    
    	Dim txt = DirectCast(sender, TextBox)
    	Dim Result As Integer = 0
    
    	Int32.TryParse(txt.Text, Result)
    	txt.BackColor = If((Result < CInt(textBox1.Text)) OrElse (Result > CInt(textBox2.Text)),
    							Color.LightCoral, Color.LightCyan)
    
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator viernes, 31 de marzo de 2017 16:24
    • Marcado como respuesta Juan Ortiz T viernes, 31 de marzo de 2017 20:45
    viernes, 31 de marzo de 2017 6:03
  • Juan Ortiz T,

    Tienes razón, soy yo el que no estaba considerando el umbral mínimo que podría ser cero siendo que también podría resultar cero cuando el intento de conversión es fallido (cuando se intenta convertir una cadena de longitud cero o cualquier otra cadena sin formato apropiado a un valor numérico). 

    Private Sub txtResultado_TextChanged(sender As Object...
    
    	Dim txt = DirectCast(sender, TextBox)
    	Dim Result As Integer
    
    	If Int32.TryParse(txt.Text, Result) Then
    		txt.BackColor = If((Result >= CInt(textBox1.Text)) AndAlso 
    			(Result <= CInt(textBox2.Text)), Color.LightCyan, Color.LightCoral)
    	Else
    		txt.BackColor = If(txt.Text = String.Empty, Color.LightCyan, Color.LightCoral)
    	End If
    
    End Sub

    Las validaciones se realizan asumiendo que no tienes ningún control sobre las teclas que se pulsan sobre el objeto 'txtResultado'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Juan Ortiz T lunes, 3 de abril de 2017 20:58
    sábado, 1 de abril de 2017 3:57

Todas las respuestas

  • Juan Ortiz T,

    Intenta hacer lo siguiente:

    Private Sub txtResultado_TextChanged(sender As Object...
    
    	Dim txt = DirectCast(sender, TextBox)
    	Dim Result As Integer = 0
    
    	Int32.TryParse(txt.Text, Result)
    	txt.BackColor = If((Result < CInt(textBox1.Text)) OrElse (Result > CInt(textBox2.Text)),
    							Color.LightCoral, Color.LightCyan)
    
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator viernes, 31 de marzo de 2017 16:24
    • Marcado como respuesta Juan Ortiz T viernes, 31 de marzo de 2017 20:45
    viernes, 31 de marzo de 2017 6:03
  • Que tal Willams Morales,

    antes que nada, gracias por tu pronta respuesta.

    Traté con el código que me propusiste.

    Al final le agregué

            If textboxResult.Text = "" Then
                textboxResult.BackColor = Color.LightCyan
            End If

    Ya con eso, si dejo en blanco el resultado, se queda el color original de fondo del txtbox, que es lo que estaba buscando lograr. Ese código que puse lo ponía antes pero ahora ya funciona con el código que proporcionaste. 

    Agradezco mucho tu ayuda, y espero que a alguien más le pueda servir esto de ayuda!

    Saludos


    viernes, 31 de marzo de 2017 20:57
  • Juan Ortiz T,

    ¿Seguro que has utilizado el código propuesto?, de ser así no necesitarías evaluar si el contenido de la propiedad Text -del objeto textboxResult- es una cadena de longitud cero, ya que de serlo el método TryParse() retornaría cero, valor que es menor al limite inferior y en consecuencia entraría a la parte expresionIfFalse donde se pinta de color LightCyan. De hecho, si permites que el usuario ingrese un valor deberías cuidar que la cadena contenga una representación numérica que permita la conversión a un tipo numérico entero, y para ello una propuesta es el uso del método TryParse() tal como escribí en el ejemplo propuesto.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 1 de abril de 2017 0:13
  • Si, como te comento, me sale el mismo resultado que con el código que usaba, si ingreso un número fuera de los límites en el resultado se colorea LightCoral, y si borro ese número y dejo el campo vacío, igual se queda en LightCoral en vez de volver a LightCyan. No entiendo por qué pasa eso, si se supone que si está vacío no debe hacer ninguna comparación ya que no hay ningún valor dentro de ese campo resultado.

    Disculpa si son dudas muy obvias, soy nuevo en programación

    Saludos
    sábado, 1 de abril de 2017 2:29
  • Juan Ortiz T,

    Tienes razón, soy yo el que no estaba considerando el umbral mínimo que podría ser cero siendo que también podría resultar cero cuando el intento de conversión es fallido (cuando se intenta convertir una cadena de longitud cero o cualquier otra cadena sin formato apropiado a un valor numérico). 

    Private Sub txtResultado_TextChanged(sender As Object...
    
    	Dim txt = DirectCast(sender, TextBox)
    	Dim Result As Integer
    
    	If Int32.TryParse(txt.Text, Result) Then
    		txt.BackColor = If((Result >= CInt(textBox1.Text)) AndAlso 
    			(Result <= CInt(textBox2.Text)), Color.LightCyan, Color.LightCoral)
    	Else
    		txt.BackColor = If(txt.Text = String.Empty, Color.LightCyan, Color.LightCoral)
    	End If
    
    End Sub

    Las validaciones se realizan asumiendo que no tienes ningún control sobre las teclas que se pulsan sobre el objeto 'txtResultado'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Juan Ortiz T lunes, 3 de abril de 2017 20:58
    sábado, 1 de abril de 2017 3:57
  • Hola Willams Morales,

    Ahora si ya funciona bien, a lo que he querido lograr. 

    Una pregunta, a que te refieres con no tener ningún control sobre las teclas que se pulsan? 

    lunes, 3 de abril de 2017 21:00