![]() |
Error en programa: Illegal function call
Hola foreros.
Mi problema es el siguiente: En los programas que hago pongo la propiedad 'Enabled' de los controles que utilizo como POW-TRUE o POW-FALSE, dependiendo de si quiero que el usuario modifique en ese momento el valor del control o no. Por ejemplo, en un mantenimiento de un fichero, si no se pulsa el botón de 'Editar' no quiero que acceda a ningún campo del fichero. También tengo indicado en el evento 'PreKeyDown' del formulario, que cuando se pulse 'ESC', según si está en modo edición o no, acceda a unos controles u otros. Pero me pasa que, solo a veces en algunos programas, cuando va a 'Enablar' o 'Desenablar' un control se me pierde el foco y me da el error 'Illegal function call'. Y aunque haga un 'SetFocus' a un control que anteriormente le he puesto POW-TRUE en su propiedad 'Enabled', no va a dicho control, y el foco se sitúa en otro control (es decir, donde le da la gana). No se si alguien me puede dar una pista de por qué me puede ocurrir esto. Un saludo. |
Begoguay, esto ocurre porque el orden de ejecución de las rutinas GUI no siempre corresponde con el orden de su lanzamiento.
Este error suele darse cuando justamente hacemos SetFocus sobre un control que en el momento lo tiene en estado Disabled. Para evitar este tipo de problemas, usa el método ThruEvents antes de hacer SetFocus: Código COBOL:
Dicho método asegurará la espera necesaria para que todas la rutinas GUI se ejecuten antes de la siguiente línea de código, que en nuestro caso es el SetFocus. |
Hola.
Lo estoy probando, poniendo delante de cada SetFocus el evento ThruEvents y sigue sin funcionar La única forma de arreglarlo es dejar activos los controles a los que va (sin que yo se lo diga) y en su evento GotFocus controlar que deje o no modificar ese control según si quiero que esté activo o no. |
Begoguay, eso es que se te está escapando algo. Jugando con GetFocus y SetFocus, como decía, el orden de ejecución no está garantizado. Revísalo, yo lo resolví con el ThruEvents.
|
| La franja horaria es GMT +2. Ahora son las 14:42. |
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.