Tengo una aplicación WinForms C# .NET 2.0. Mi aplicación tiene un control que es un contenedor para dos controles secundarios: una etiqueta y algún tipo de control de edición. Usted puede pensar en él como esta, donde la caja exterior es el control de los padres:Padres control del ratón Enter/Deja eventos con controles secundarios
+---------------------------------+ | [Label Control] [Edit Control] | +---------------------------------+
que estoy tratando de hacer algo cuando el ratón entra o sale del control de los padres, pero no me importa si el ratón se mueve en uno de sus hijos. Quiero una sola bandera para representar "el mouse está en algún lugar dentro del padre o hijos" y "el mouse se ha movido fuera de los límites de control principales".
he tratado manejo MouseEnter y MouseLeave en el padre y los dos controles secundarios, pero esto significa que la acción comienza y termina en múltiples ocasiones cuando el ratón se mueve a través del control. En otras palabras, me sale esto:
Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop) Child.OnMouseEnter (start doing something) Child.OnMouseLeave (stop) Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop)
Los eventos intermedios OnMouseLeave causar algunos efectos no deseados como lo que estoy haciendo se inicia y luego se detuvo. Quiero evitar eso.
no quiero capturar el ratón como el padre se pone el ratón sobre, debido a que los controles secundarios necesitan que sus eventos de ratón, y quiero menú y otras teclas de acceso directo a trabajar.
¿Hay una manera de hacer esto dentro del marco .NET? ¿O necesito usar un gancho de mouse de Windows?
Si salgo de la matriz actual, no sé de antemano entraré en un control infantil o realmente me voy del padre. Y si hice lo que sugiere, el padre OnMouseLeave tendría que decir "hey, soy yo, así que continúe procesando", por lo que mudarse fuera del control y no a otro control no detendría el procesamiento. –
Aunque este es un buen punto, si la estructura de contención de control no tiene que ser demasiado flexible, es decir, la contención de nivel ny/o si se tiene en cuenta el tipo principal, se podría seguir utilizando este método. Por ejemplo, obtiene un evento enter, luego toma el control del que procede y sube el árbol de contención hasta que vea un GroupBox o Panel (lo que contenga sus botones) y evalúe la referencia a ese valor. Cuando cambia –