none
validar fecha en textbox RRS feed

  • Pregunta

  • hola, tengo un formulario donde el usuario tiene que ingresar la fecha de nacimiento, pero en la funcion leave del textbox quisire verificar si esa fecha es valida y si es validad que me agregue el signo "/". el formato es dd/mm/yyyy

    es windows form

    viernes, 19 de agosto de 2011 21:01

Respuestas

  • hola

    porque no usas mejor el evento Validating este es ideal para esto que planteas

     

    Extending Windows Forms with a Custom Validation Component Library

     

    podria ser

    Private Sub textBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles textBox1.Validating
     
    	Dim fecha As DateTime
    
    	If Not DateTime.TryParse(textBox1.Text, fecha) Then
    
    		errorProvider1.SetError(textBox1, "la fecha ingresada no es valida")
    	
    	End If
     
    End Sub
    

    usa el control Errorprovider que esta en la toolbox del vs para mostrar el error, no uses el MessageBox en este evento

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 19 de agosto de 2011 21:31
  • "10Gox" preguntó:

    > tengo un formulario donde el usuario tiene que ingresar la fecha
    > de nacimiento, pero en la funcion leave del textbox quisire
    > verificar si esa fecha es valida y si es validad que me agregue
    > el signo "/". el formato es dd/mm/yyyy

    Hola:

    Por el contenido de tu pregunta, deduzco que no deseas que el usuario introduzca en el control TextBox el carácter separador de los distintos componentes de la fecha, es decir, que para la fecha del día de hoy, el usuario escribirá en el control

        20082011

    Pero asimismo, si la fecha es correcta deseas incluir automáticamente el carácter separador correspondiente.

    Si es así, y siempre y cuando el usuario se limite a escribir los ochos dígitos de los que se compone la fecha, puedes validar ésta en el evento Leave del control TextBox, de la siguiente manera:

      Private Sub txtFecha_Leave(sender As Object, e As EventArgs) Handles txtFecha.Leave
    
        ' Referenciamos el control TextBox que ha desencadenado
        ' el evento Leave.
        '
        Dim tb As TextBox = DirectCast(sender, TextBox)
    
        ' Si no hay ningún valor, abandonamos el procedimiento.
        '
        If (tb.Text = String.Empty) Then Return
    
        ' Creamos un objeto CultureInfo correspondiente 
        ' al subproceso actual.
        '
        Dim ci As CultureInfo = Application.CurrentCulture
    
        ' Verificamos si la fecha es correcta y cumple con el
        ' modelo ddMMyyyy.
        '
        Dim dt As DateTime
        Dim bln As Boolean = DateTime.TryParseExact( _
          tb.Text, "ddMMyyyy", ci, DateTimeStyles.None, dt)
    
        If (Not (bln)) Then
          ' La fecha no es correcta; no cancelamos el evento.
          ' Simplemente eliminamos el contenido del control
          ' TextBox y que el usuario se espabile e introduzca
          ' una fecha correcta.
          '
          tb.Clear()
    
        Else
          ' Formateamos la fecha correctamente.
          '
          tb.Text = String.Format("{0:dd/MM/yyyy}", dt)
    
        End If
    
      End Sub
    

    Al validarse la fecha con el modelo de fecha ddMMyyyy (sin carácter separador), la fecha tiene que tener EXACTAMENTE ese modelo: dos dígitos para el día, otros dos dígitos para el mes y cuatro dígitos para el año, en total, ocho dígitos que deberá de escribir el usuario. No vale otro número de cifras distinto para cada uno de los componentes de la fecha, o la inclusión de cualquier carácter separador.

    Y si no es ésto lo que deseas, aclara un poco mejor el contenido de tu pregunta.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    sábado, 20 de agosto de 2011 6:19
    Moderador

Todas las respuestas

  • hola

    porque no usas mejor el evento Validating este es ideal para esto que planteas

     

    Extending Windows Forms with a Custom Validation Component Library

     

    podria ser

    Private Sub textBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles textBox1.Validating
     
    	Dim fecha As DateTime
    
    	If Not DateTime.TryParse(textBox1.Text, fecha) Then
    
    		errorProvider1.SetError(textBox1, "la fecha ingresada no es valida")
    	
    	End If
     
    End Sub
    

    usa el control Errorprovider que esta en la toolbox del vs para mostrar el error, no uses el MessageBox en este evento

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 19 de agosto de 2011 21:31
  • Hola

    Aparte de la validación que te muestra Leandro hay herramientas como el MaskedTextBox que te permite validar que los datos ingresados tengan el formato correcto


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    sábado, 20 de agosto de 2011 0:40
  • si ese o el DateTimePicker

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 20 de agosto de 2011 3:18
  • "10Gox" preguntó:

    > tengo un formulario donde el usuario tiene que ingresar la fecha
    > de nacimiento, pero en la funcion leave del textbox quisire
    > verificar si esa fecha es valida y si es validad que me agregue
    > el signo "/". el formato es dd/mm/yyyy

    Hola:

    Por el contenido de tu pregunta, deduzco que no deseas que el usuario introduzca en el control TextBox el carácter separador de los distintos componentes de la fecha, es decir, que para la fecha del día de hoy, el usuario escribirá en el control

        20082011

    Pero asimismo, si la fecha es correcta deseas incluir automáticamente el carácter separador correspondiente.

    Si es así, y siempre y cuando el usuario se limite a escribir los ochos dígitos de los que se compone la fecha, puedes validar ésta en el evento Leave del control TextBox, de la siguiente manera:

      Private Sub txtFecha_Leave(sender As Object, e As EventArgs) Handles txtFecha.Leave
    
        ' Referenciamos el control TextBox que ha desencadenado
        ' el evento Leave.
        '
        Dim tb As TextBox = DirectCast(sender, TextBox)
    
        ' Si no hay ningún valor, abandonamos el procedimiento.
        '
        If (tb.Text = String.Empty) Then Return
    
        ' Creamos un objeto CultureInfo correspondiente 
        ' al subproceso actual.
        '
        Dim ci As CultureInfo = Application.CurrentCulture
    
        ' Verificamos si la fecha es correcta y cumple con el
        ' modelo ddMMyyyy.
        '
        Dim dt As DateTime
        Dim bln As Boolean = DateTime.TryParseExact( _
          tb.Text, "ddMMyyyy", ci, DateTimeStyles.None, dt)
    
        If (Not (bln)) Then
          ' La fecha no es correcta; no cancelamos el evento.
          ' Simplemente eliminamos el contenido del control
          ' TextBox y que el usuario se espabile e introduzca
          ' una fecha correcta.
          '
          tb.Clear()
    
        Else
          ' Formateamos la fecha correctamente.
          '
          tb.Text = String.Format("{0:dd/MM/yyyy}", dt)
    
        End If
    
      End Sub
    

    Al validarse la fecha con el modelo de fecha ddMMyyyy (sin carácter separador), la fecha tiene que tener EXACTAMENTE ese modelo: dos dígitos para el día, otros dos dígitos para el mes y cuatro dígitos para el año, en total, ocho dígitos que deberá de escribir el usuario. No vale otro número de cifras distinto para cada uno de los componentes de la fecha, o la inclusión de cualquier carácter separador.

    Y si no es ésto lo que deseas, aclara un poco mejor el contenido de tu pregunta.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    sábado, 20 de agosto de 2011 6:19
    Moderador
  • Usa el DatetimePicker http://forums.asp.net/t/1454161.aspx/1?DateTime+Picker

    es muy Bueno y te ayuda a Desarrollar mas Rapido


    JEYSSON RAMIREZ Desarrollador Bogotá, D.C., Colombia nabukodonosor_01@hotmail.com
    martes, 23 de agosto de 2011 0:33
  • exacto lo mismo comente, para que complicarse si hay un control que ya implementa esta funcionalidad
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 23 de agosto de 2011 1:24
  •  Hola, todas las respuestas estan muy bien pero esta me gusto un poco mas de hecho aunque yo no formule esta pregunta si adopte esta respuesta a mi programa. Lo unico que no entiendo es el siguiente paso:

     ' Si no hay ningún valor, abandonamos el procedimiento.
        '
        If (tb.Text = String.Empty) Then Return

    A ke se refiere este paso?

    Saludos


    Leonardo Palomares V. Estudiante

    jueves, 12 de abril de 2012 3:00
  • se refiere a que si dejas o salen del control sin haber escrito nada

    entonces no aplcia ninfuna validacion de fecha, solo sale del evento sin hacer nada


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 12 de abril de 2012 3:26
  • Gracias Leandro en si gracias a todos, aqui hay mucha gente con quien apoyarse.

    Para los que vamos iniciando en este grandioso mundo de la programacion... Por cierto, aki hay foros para comprender un poco mas sobre la logica?

    Saludos


    Leonardo Palomares V. Estudiante

    jueves, 12 de abril de 2012 3:33
  • aki hay foros para comprender un poco mas sobre la logica?

    los foros basicamente apuntan a tecnologias microsoft especificamente, no hay temas generales

    pero si esta logica aplica luego en algun lenguaje podrias realizarla sin problemas, de ultima sino aplica se dira en su momento

    lo que si ojo, la idea del foro es brindar orientacion, si esta logica que quieres analizar esta referida a ejercicios completos de tus estudios de universidad, o similar, no quedaria bien que los plantees aqui


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 12 de abril de 2012 3:38