Ocurre con frecuencia que quienes llevamos algún tiempo lidiando ya con un lenguaje o entorno de programación damos por sentadas las bases o algunos fundamentos que son necesarios tener en cuenta por quienes empiezan. Esto es lo que ocurre, por ejemplo, en el caso de los eventos y de como se propagan por nuestra aplicación.
Y esto viene al caso de una consulta publicada por un usuario de Xojo en el foro, donde dicho usuario preguntaba sobre cómo podía hacer para evitar que dos controles superpuestos no respondiesen al evento MouseDown. Es decir, quería que una vez interceptado por el control superior no fuese ejecutado también el “clic” del ratón por el control que estaba situado justo debajo.
¿La solución? Muy sencilla: un simple Return True
como última instrucción en el evento MouseDown
del control situado en la parte superior de la jerarquía de controles… y listo. Con dicha instrucción se informa al sistema de que este control ya ha gestionado el evento y de que no es necesario propagarlo por el resto de la cadena; es decir, el resto de controles ubicados bajo él, llegando hasta la ventana que los contiene y, por último, el objeto App que es el objeto raíz de una aplicación.
Esto también es así en la gestión de los elementos de menú (MenuItem) que gestionamos incorporando los MenuHandler tanto en ventanas como en el objeto App o también en los Container Control. En este caso, sin embargo, cada vez que añadimos código para la gestión de una opción de menú es el propio Xojo el que se encarga de añadir el correspondiente Return True
por omisión, de modo que la acción no se propague a lo largo de la cadena de objetos. Es decir, que se realiza correctamente salvo que nosotros eliminemos dicha línea o la cambiemos por un Return False
; quizá por que nos interese que otro objeto de la aplicación también se encargue de responder a esa misma acción.