Dans TreeView, ListBox, ou il semble que mes recherches Google aient un ScrollBar, le ScrollBar n'est pas considéré comme faisant partie du contrôle.L'événement TreeView MouseLeave se déclenche lorsque vous vous déplacez sur ScrollBar
J'ai un TreeView que je mets dans un contrôle personnalisé, et c'est Dock Fill. Donc là, il agit comme un TreeView personnalisé qui a toute notre logique pour le gérer en un seul endroit.
Dans certaines parties de notre programme, nous le faisons glisser en fonction d'un événement MouseEnter et le réinsérons dans un événement MouseLeave, mais nous utilisons actuellement TreeView d'une bibliothèque tierce pour laquelle j'ai été chargé de le remplacer.
J'ai donc tout déplacé sur Windows TreeView, mais je n'arrive pas à trouver un moyen fiable de capturer le MouseLeave -seulement- s'il laisse toute la TreeView, barre de défilement incluse.
J'ai vu une solution hackish de l'envelopper dans un panneau avec plusieurs pixels et de capturer le MouseLeave du panneau, mais je ne crois pas que c'est ce que Microsoft nous avait prévu de faire dans cette situation.
En bref:
La barre de défilement ne se déclenche pas MouseEnter ou MouseLeave pour le contrôle, et qui rend l'utilisation MouseEnter/MouseLeave pour faire glisser le contrôle inutilisable car l'utilisateur ne peut pas utiliser l'ascenseur.
Quelle est la meilleure façon de gérer cette situation?
Ceci est .net, n'a pas accès à WndProc ou WM_NCMOUSEMOVE –
Bien sûr, WndProc() est une méthode de la classe TreeView que vous pouvez surcharger dans votre propre classe dérivée. WM_NCMOUSEMOVE est un nombre, il est 0xa0. Vérifiez les documents MSDN. –