Ir al contenido principal

Nullable DateTimePicker (DateEditPicker)

Bueno, luego de haberme ausentado tanto de mi blog y no es que lo haya abandonado o haya dejado de programar, solo que he estado ocupado en otras cosas personales.

Bien, recientemente desarrollando una aplicación para un cliente me toco enfrentarme de frente con un campo fecha nulo, por la forma en que se desarrollo el proyecto y las necesidades del cliente tuve que dejar con valores nulos la fecha de nacimiento de los clientes, luego al iniciar a desarrollar la parte que corresponde a los clientes me vi en la necesidad de adaptar el control DateTimePicker para poder usarlo con fechas nulas, para no hacer muy largo el cuento, como hacemos todos los programadores para evitar la fatiga comense a googlear pero no me gustaron las opciones que encontré; entonces adapte un control para tal propósito, pero luego me vi en la necesidad de hacer que dicho control ademas de fecha también pudiera capturar la hora, pero como era un control hechizo no se podía, así que me tome mi tiempo para poder escribir un control para tal proposito.

En fin, la idea del control es que le permita al usuario digitar la fecha parte por parte y cuando digo parte por parte me refiero a digitar el día, el mes y el año "dd/MMM/yyyy" sin auto-completar la fecha con el mes y año actual como lo hacen la mayoría de los controles que aceptan fechas nulas.

La idea de digitar la fecha parte por parte me llevo a un dilema, ¿Como hago para hacerle saber al usuario que parte de la fecha debe digitar o que parte de la fecha esta editando cuando sea nula? (Día)/(Mes)/(Año)
como también el dilema ¿Como lo hago?

Luego de eso, era también que el control funcionar como el DateTimePicker, usando formatos ya definidos o usar un formato personalizado.

Así que lo ideal fue ver detenidamente como funcionaba el DateTimePicker hasta que logre reproducir el funcionamiento de este y como resultado:

Formato: Long




Formato: Short




Formato:




Formato: Custom (dddd, dd/MMM/yyyy HH:mm:ss tt)




Ademas de poderle agregar botones como también una imagen como lo hago con el control TextEditor, estas dos opciones eran las mas fáciles, el problema era saber según el formato donde quedaba cada parte de la fecha a editar ya que en un formato personalizado podemos usar como por ejemplo:

dddd, dd/MMM/yyyy ----- d/M,

Ejemplo en imagen:










y como sabemos el Control DateTimePicker nos permitirá editar la parte día y mes en ambas ocurrencias.

así que como resultado he creado un control que he llamado DateEditPicker que permite editar fechas nulas indicando al usuario que parte de la fecha esta editando cuando la fecha es nula.

Pueden descargar este proyecto para que prueben el control y me hagan saber sus come ntarios.

Así que espero les guste y les sea de utilidad.

Salu2,





Comentarios

Publicar un comentario

Entradas populares de este blog

TextBox con Borde Personalizado

Bien, retomando nuevamente mi blog, luego de tanto tiempo ausente, veremos como personalizar el borde del control TextBox con un color diferente. hace poco vi en los foros de MSDN, en el foro de VB.Net esta pregunta, ¿ Cómo puedo cambiar el color del borde de un control TextBox ?, anteriormente también se hizo la misma pregunta en este mismo foro donde yo respondí como hacerlo VB2010 4.0 - Como crear un textbox personalizado . no hay manera fácil de personalizar un control, generalmente se tiene que sobre escribir el evento WndProc para escuchar los mensajes de window y reemplazar la funcionalidad de estos según sea la necesidad o el control. bien, para cambiar el color del borde del control TextBox sin mucha funcionalidad, se debe de escuchar y reemplazar el funcionamiento de los mensajes WM_PAINT y WM_NCPAINT . ¿ Porque WM_PAINT ?, porque cuando cambiamos la propiedad BorderStyle de este control a FixedSingle, quien pinta el borde es el mensaje WM_PAINT no asi el WM_NC

TextBox con Icon/Imagen

Bien, continuando con este articulo: TextBox con borde personalizado , ahora le dare la funcionalidad de poder mostrar un icono o imagen dentro del Control TextBox. Existen dos maneras de hacer esto: Pintar el icono/imagen dentro del control o Pintar el icono/imagen dentro del Non-Client Area del control. Pintar el icono/imagen dentro del control. Antes de escribir el código decidi googlear un poco, para ver si alguien más ya habia tenido la misma idea de usar el mensaje EM_SETMARGINS para dejar el espacio necesario para pintar el icono o imagen ya sea a la derecha o izquierda y me he encontrado con este articulo. Adding an Icon or Control to a TextBox or ComboBox . Pintar el icono/imagen de ntro del Non-Client Area del control. Us ando el Non- Client Area no encontre resultados googleando, así que es la forma que usar e para dib ujar un icono o imagen dentro de un control TextBox. En el control TextEditor que escrib í, utilizo esta manera para pintar el icono

Personalizar DataGridView (II) - Bloquear columnas de solo lectura

Personalizar DataGridView - Actualizaciones Personalizar DataGridView (II.1) - Bloquear columnas de solo lectura. Personalizar DataGridView (III) - Cambiar Diseñador. Bien, continuando con el articulo " Personalizar DataGridView (I) - Pintar área vacía ", ahora lo que haré es darle al control la funcionalidad de bloquear las columnas cuya propiedad " ReadOnly " se establezca en " true ", entiéndase por "Bloquear" el evitar que las columnas cuya propiedad " ReadOnly=true " puedan recibir el foco, ya sea por el teclado o por el ratón ( mouse ). Para tal objetivo agregare una nueva propiedad al control la cual llamare " AllowFocusReadOnlyColumns " cuyo valor predeterminado sera " true ", en caso de ser " false " las columnas marcadas como solo lectura no recibirán el foco. También le daré la funcionalidad de poder avanzar a la siguiente columna al presionar la tecla " ENTER " agregando otr