none
validar num min y max txtbox RRS feed

  • Pregunta

  • Quiero validar el ingreso de una edad en un txtbox, que no habilite el próximo control (un combobox)

    hice algo así: (¿TENDRIA QUE VALIDAR CON EL IF > 17 AND < 120?)

        Private Sub txtEdad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEdad.TextChanged
    
            If Val(txtEdad.Text) > 17 Then
                If Val(txtEdad.Text) < 120 Then
                    cboSexo.Focus()
                    cboSexo.Enabled = True
                    txtEdad.BackColor = Color.White
                Else
                    txtEdad.BackColor = Color.Coral
                    cboSexo.Enabled = False
                End If
            End If
    
    
            PictureBox1.Image = My.Resources.vote
    
    
        End Sub

    Gracias

    jueves, 2 de mayo de 2013 1:27

Respuestas

  • Esta casi bien, solo te falta controlar la situación de edad menor de 17

    Private Sub txtEdad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEdad.TextChanged
    
            If Val(txtEdad.Text) > 17 Then
                If Val(txtEdad.Text) < 120 Then
                    cboSexo.Focus()
                    cboSexo.Enabled = True
                    txtEdad.BackColor = Color.White
                Else
                    txtEdad.BackColor = Color.Coral
                    cboSexo.Enabled = False
                End If
            Else
               txtEdad.BackColor = Color.Coral
               cboSexo.Enabled = False
            End If
    
            PictureBox1.Image = My.Resources.vote
    
    End Sub

    También supongo que controlaras que solo se puedan introducir números.


    Saludos, Javier J

    jueves, 2 de mayo de 2013 10:11
  • "LaMafia" escribió:

    > Quiero validar el ingreso de una edad en un txtbox, que no habilite
    > el próximo control (un combobox)
    >
    > hice algo así: (¿TENDRIA QUE VALIDAR CON EL IF > 17 AND < 120?)
    >
    >  If Val(txtEdad.Text) > 17 Then

    Hola:

    Si estamos hablando de validar EDADES, hablamos de validar NÚMEROS ENTEROS: 17, 23, 119 años, etc. Aunque es correcto que utilices para ello la función Val del espacio de nombres Microsoft.VisualBasic, en éste caso concereto no sería muy prudente utilizarla, porque deberías de saber que dicha función devuelve un valor Double, que no es un valor entero como Short, Integer o Long, por tanto se puede dar el caso que el usuario escriba en el control TextBox valores decimales como 17.01, 17.99, con lo cual, al ser mayor de 17 se verificará como correcta la edad del votante, y me imagino que eso no es lo que deseas, ya que lo que pretendes conocer es si la edad del votante está comprendida entre los 18 y 119 años.

    Eso por un lado, y por otro, si posteriormente ese valor lo deseas insertar en el campo de una tabla definido con un tipo de dato numérico entero, puedes tener problemas con los redondeos

    Entiendo que lo correcto sería definir un tipo de dato Integer y verificar si el usuario ha escrito un valor numérico entero:

        Private Sub txtEdad_TextChanged( _
            ByVal sender As Object, ByVal e As EventArgs) Handles txtEdad.TextChanged
    
            ' Verificamos si se ha escrito un número entero.
            '
            Dim edad As Integer
            Dim esMayor As Boolean = Integer.TryParse(txtEdad.Text, edad)
    
            If (esMayor) Then
                ' En principio se ha escrito un valor válido; comprobamos
                ' si cumple los restantes requisitos.
                '
                esMayor = ((edad > 17) And (edad < 120))
            End If
    
            cboSexo.Enabled = esMayor
    
            If (esMayor) Then
                txtEdad.BackColor = Color.White
                cboSexo.Focus()
    
            Else
                txtEdad.BackColor = Color.Coral
    
            End If
    
        End Sub

    Asimismo observarás que el código es más claro y conciso. ;-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 4 de mayo de 2013 9:00
    Moderador

Todas las respuestas

  • en realidad la logica que estas usando me parece bien.

    igual podria estar la condicion todo en un IF.

    IF VAL(me.txtEdad.text)>17 and val(me.txtEdad.text)<120 then

     


    Luis Muñoz Hidalgo
    Mi Blog
    Desarrollador de Software
    Trujillo-Perú

    jueves, 2 de mayo de 2013 1:48
  • Esta casi bien, solo te falta controlar la situación de edad menor de 17

    Private Sub txtEdad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEdad.TextChanged
    
            If Val(txtEdad.Text) > 17 Then
                If Val(txtEdad.Text) < 120 Then
                    cboSexo.Focus()
                    cboSexo.Enabled = True
                    txtEdad.BackColor = Color.White
                Else
                    txtEdad.BackColor = Color.Coral
                    cboSexo.Enabled = False
                End If
            Else
               txtEdad.BackColor = Color.Coral
               cboSexo.Enabled = False
            End If
    
            PictureBox1.Image = My.Resources.vote
    
    End Sub

    También supongo que controlaras que solo se puedan introducir números.


    Saludos, Javier J

    jueves, 2 de mayo de 2013 10:11
  • "LaMafia" escribió:

    > Quiero validar el ingreso de una edad en un txtbox, que no habilite
    > el próximo control (un combobox)
    >
    > hice algo así: (¿TENDRIA QUE VALIDAR CON EL IF > 17 AND < 120?)
    >
    >  If Val(txtEdad.Text) > 17 Then

    Hola:

    Si estamos hablando de validar EDADES, hablamos de validar NÚMEROS ENTEROS: 17, 23, 119 años, etc. Aunque es correcto que utilices para ello la función Val del espacio de nombres Microsoft.VisualBasic, en éste caso concereto no sería muy prudente utilizarla, porque deberías de saber que dicha función devuelve un valor Double, que no es un valor entero como Short, Integer o Long, por tanto se puede dar el caso que el usuario escriba en el control TextBox valores decimales como 17.01, 17.99, con lo cual, al ser mayor de 17 se verificará como correcta la edad del votante, y me imagino que eso no es lo que deseas, ya que lo que pretendes conocer es si la edad del votante está comprendida entre los 18 y 119 años.

    Eso por un lado, y por otro, si posteriormente ese valor lo deseas insertar en el campo de una tabla definido con un tipo de dato numérico entero, puedes tener problemas con los redondeos

    Entiendo que lo correcto sería definir un tipo de dato Integer y verificar si el usuario ha escrito un valor numérico entero:

        Private Sub txtEdad_TextChanged( _
            ByVal sender As Object, ByVal e As EventArgs) Handles txtEdad.TextChanged
    
            ' Verificamos si se ha escrito un número entero.
            '
            Dim edad As Integer
            Dim esMayor As Boolean = Integer.TryParse(txtEdad.Text, edad)
    
            If (esMayor) Then
                ' En principio se ha escrito un valor válido; comprobamos
                ' si cumple los restantes requisitos.
                '
                esMayor = ((edad > 17) And (edad < 120))
            End If
    
            cboSexo.Enabled = esMayor
    
            If (esMayor) Then
                txtEdad.BackColor = Color.White
                cboSexo.Focus()
    
            Else
                txtEdad.BackColor = Color.Coral
    
            End If
    
        End Sub

    Asimismo observarás que el código es más claro y conciso. ;-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 4 de mayo de 2013 9:00
    Moderador