He vuelto a enviar esta pregunta debido a la imposibilidad de resolver el problema (original here).MouseLeave El evento se dispara cuando se mueve sobre ScrollBar del control
En el TreeView, ListBox, o parece que desde mi google busca cualquier cosa con ScrollBar, ScrollBar no se considera una parte del control.
Tengo un TreeView que estoy poniendo en un control personalizado, y es Dock Fill. Entonces funciona como una TreeView personalizada que tiene toda nuestra lógica para administrarla en un solo lugar.
En partes de nuestro programa, lo deslizamos en función de un evento MouseEnter y lo volvemos a deslizar en un evento MouseLeave; sin embargo, estamos utilizando una TreeView de biblioteca de terceros para esto, que he tenido la tarea de reemplazar.
Así que he trasladado todo a Windows TreeView, pero no puedo encontrar una forma de capturar el MouseLeave de manera confiable, solo si deja todo el TreeView, la barra de desplazamiento incluida.
He visto una solución hackish de envolverlo en un panel con varios píxeles y capturar el MouseLeave del panel, pero no creo que esto sea lo que Microsoft pretendía que hiciéramos en esta situación.
En breve:
El ScrollBar no se dispara MouseEnter o MouseLeave para el control, y que hace que el uso MouseEnter/MouseLeave para deslizarse a cabo el control inutilizable ya que el usuario no puede utilizar la barra de desplazamiento.
¿Cuál es la forma preferida de manejar esta situación?
En la pregunta anterior recibí consejo para usar Spy ++ e intentar adjuntarlo a WndProc() para manejar MouseEnter/MouseLeave para ScrollBar.
Sin embargo, esto no funcionó ya que los mensajes que Spy ++ mostró no se activaron en el WndProc() a nivel de formulario o nivel de control. Es como si .NET simplemente no pudiera ver ScrollBar.
El uso de WndProc() también parece poco realista para una solicitud tan simple, ¿hay alguna otra manera de hacerlo, o si WndProc() es la única manera, alguien realmente ha podido lograr esto y mostrarme cómo?
Esto funcionó perfectamente, gracias! –