Pregunta

En TreeView, ListBox, o parece que en mi Google busca cualquier cosa con una barra de desplazamiento, la barra de desplazamiento no se considera parte del control.

Tengo una vista de árbol que estoy poniendo en un control personalizado, y es un muelle. Así que allí actúa como una vista de árbol personalizada que tiene toda nuestra lógica para administrarla en un solo lugar.

En partes de nuestro programa, lo deslizamos en base a un evento de mouseenter y lo deslizamos nuevamente en un evento MouseLeave, sin embargo, actualmente estamos utilizando la vista de árbol de una biblioteca de terceros para esto, que me han encargado reemplazar.

Así que he movido todo a la vista de árbol de Windows, pero no puedo encontrar una manera de capturar confiable el mouseleave, solo si deja toda la vista de árbol, incluida la barra de desplazamiento.

He visto una solución hackish de envolverlo en un panel con varios píxeles y capturar el mouseleave del panel, pero apenas creo que esto es lo que Microsoft había tenido la intención de que hiciéramos en esta situación.

En breve:

La barra de desplazamiento no dispara ratón o mouseve mouseve para el control, y eso hace que el uso de mouseenter/mouseave para deslizar el control inutilizable ya que el usuario no puede usar el barra de desplazamiento.

¿Cuál es la forma preferida de manejar esta situación?

¿Fue útil?

Solución

Enciende Spy ++ y seleccione la ventana TreeView. Mueva el mouse en la barra de desplazamiento. Mucha actividad allí, Wm_ncMousemove me parece una buena para mí. Atrapa en una anulación WNDPROC ().

Otros consejos

Coloque un panel con el tamaño exacto del cuadro de lista, incluido el barra de desplazamiento en el cuadro de lista. Luego ponga el evento Mouseleave en el panel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top