problema extraño al darle el enfoque a un control

juanolas
01 de Octubre del 2003
Hola a todos-as,
Quisiera q alguien me echase una mano con el problema que tengo :
estoy realizando la validacion que corresponde al introducir datos lo q hago basicamente es comprobar la cadena q contiene el textbox ,dicha validacion la hago cuando el elemento pierde el enfoque si todo esta correcto no hago nada y el enfoque pasa al siguiente control por el contrario si la cadena en la caja no cumple el formato del campo ,osea q no esta bien introducido enseño un mensaje en un statusbar ,borro el contenido de dicha caja y le devuelvo el enfoque mediante la funcion setfocus ,el problema es que a veces la pantalla de visual se queda como colgada al devolverle el enfoque a dicha caja ,digo como colgada porque si pincho aon el raton en la barra de tareas se minimiza y al volverla a abrirla ya no esta colgada,esto no me pasa para todas las cojas a las que le hago la validacion ,
¿alguna explicacion?
Gracias a todos los que lean este rollo.
Un saludo.

Juan
01 de Octubre del 2003
Creo que se lo que sucede. Imáginemos que tienes 2 TextBox.
cuando el foco pasa de Text1 a Text2 se ejecuta el evento
LostFocus de Text1 después de que Text2 adquiera el foco.
Después de validar se llama a Text1.SetFocus con lo
cual el foco pasa de Text2 a Text1 originandose el evento
LostFocus de Text2, que a su vez valida y ejecuta Text2.SetFocus,
provocando que Text1 pierda el foco. Y con esto ya hemos
llegado al principio. O sea que se crea un bucle infinito
que cualga la aplicación.

El que ese bucle se rompa puede que sea debido a que
al minimizar el formulario los eventos LostFocus dejen
de producirse, supongo que en un formulario minimizado
no hay foco que perder ni foco que reclamar con SetFocus.

Para evitar esto podrías condicionar la ejecución de la
validación y el consecuente SetFocus. Intenta poniendo algo así:

If Text1.Text <> "" Then
'Validar, borrar etc.
End If

Así cuando otro control le "quite" el foco a Text1 este no volverá a reclamarlo si está vacio.