jueves, 28 de junio de 2012

Detectar MouseEnter en la capa inferior de un gráfico

Buenas,

Hoy estaba un compañero bloqueado con un problema un tanto peliagudo.

Estamos desarrollando una Addin para Excel, en donde construimos un mapa de España dividido por provincias, y encima de cada uno de los polígonos se añaden TextBox con el nombre, un valor y dos imágenes que son unos indicadores de otros valores.


El problema venía que cuando te pones encima del objeto o los valores, debe salir un Tooltip con datos. Y el programador anterior (Dios lo tenga en el infierno) no se le ocurrió otro modo de conseguir verlo cuando nos situamos encima del texto o el número o los indicadores que añadiendo tooltip a cada uno con la misma información. Es decir, por cada polígono llenaba de información el tooltip de cuatro controles más.

Entonces, necesitaba eliminar los tooltip de más y decir de alguna forma, a la aplicación, que no controlara si el ratón se ponía encima de cualquier cosa que no fuera el polígono base.

¿Y cómo hago eso?

Lo intenté preguntandole al sender del evento OnMouseEnter a ver si me traía una colección de los objetos sobre el que estaba situado el ratón. También se lo pregunté al MouseButtonEventArgs. Y por este camino yo llegue a ningún lado.

Asi que, en un momento de inspiración me puse a mirar los métodos y propiedades de los controles y me encontré con la solución:

Control.IsHitTestVisible = false

Esto hace que el objeto sea transparente para los eventos lanzados por el ratón. Lo cual produce que para el ratón solamente exista el polígono de fondo. En el ejemplo que he traído esto lo conseguí con:


imageIndicador1.IsHitTestVisible = false;
imageIndicador2.IsHitTestVisible = false;
valor1.IsHitTestVisible = false;
nombre.IsHitTestVisible = false;
path.IsHitTestVisible = true;


Espero que os sea útil.

No hay comentarios: