Visual Basic.NET - Problema con el foco en un MaskedTextBox (VB2013)

 
Vista:
sin imagen de perfil

Problema con el foco en un MaskedTextBox (VB2013)

Publicado por Paco (1 intervención) el 06/04/2017 13:48:38
Buenas, estoy creando una aplicación en Visual Basic .NET 2013 basandome en otra de VB6 y me estoy encontrando una situación extraña:

En todos los maskedtextbox que creo en un form pongo la propiedad 'InsertKeyMode" a 'Overwrite", asi como el selectstart y el selectlength a 0 en el getfocus, puesto que pretendo que al entrar el foco en el objeto el usuario comience a sobreescribir el contenido.

Esto funciona correctamente si el foco llega desde otro objeto por tabulación. Ahora bien, si fuerzo el foco desde el keydown del objeto anterior y en el lostfocus compruebo si la fecha no es válida (en cuyo caso le devuelvo el foco al maskedtextbox), al pulsar la tecla, en vez de sobreescribir el primer carácter se desplaza el contenido añadiendo el número delante, y al pulsar el siguiente valor la máscara vuelve a su sitio, pero el primer carácter introducido se ha borrado y se sobreescribe quedando un valor extraño, volviendo a dar error de validez y repitiendo el proceso.

Un ejemplo: Al iniciar el valor por defecto es la fecha de hoy y al recibir el foco desde el control anterior (con el evento '.focus' desde el keypress de ese elemento) si pulsamos 89, sobreescribe el 06 sin problemas.
Al pulsar 'Enter' enviamos el foco al siguiente control (otro masked de fecha), pero en el lostfocus al verificar que no es una fecha correcta muestra el mensaje y vuelve el foco al masked. En este caso, al pulsar 0 en vez de sobreescribir el 8 desplaza todo el contenido a la derecha e introduce el 0 delante del 89 (mostrando '089/04/2017') y al pulsar 6 borra el 0 del inicio y sobreescribe el 9, de manera que la fecha final queda como '86/04/2017', volviendo a dar el error de validación y repitiendo el proceso.

He buscado información en todas partes, e incluso he creado funciones para controlar la validación y cancelar el proceso, pero en todos los casos al recuperar el foco dentro de sus mismos eventos provoca este fallo. Sin embargo usando el tabulador no sucede y se comporta correctamente. El problema es que tengo muchos objetos que se ocultan según las opciónes preconfiguradas, por lo que necesito moverme con el evento keydown / keypress para definir el destino del foco.

¿Alguien me puede dar una explicación de este comportamiento tan extraño? Esto lo he hecho miles de veces en visual 6 y nunca he tenido ese problema.

Siento el torrón que he escrito, pero quería dejarlo lo más claro posible. Gracias.

Un saludo, Paco
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema con el foco en un MaskedTextBox (VB2013)

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 07/04/2017 17:38:41
No te compliques la vida y cambia los maskedtextboxes por datetimepicker y tu vida será mas placentera.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar