Событие TreeView MouseLeave срабатывает при перемещении по ScrollBar - PullRequest
0 голосов
/ 08 января 2010

В TreeView, ListBox или, как мне кажется из моего поиска в Google что-либо с помощью ScrollBar, ScrollBar не считается частью элемента управления.

У меня есть TreeView, который я помещаю в пользовательский элемент управления, и это Dock Fill. Таким образом, он действует как пользовательский TreeView, который имеет всю нашу логику для управления им в одном месте.

В некоторых частях нашей программы мы выдвигаем его на основе события MouseEnter и возвращаем его обратно на событие MouseLeave, однако в настоящее время мы используем для этого TreeView сторонней библиотеки, которую мне поручено заменить.

Итак, я переместил все в Windows TreeView, но не могу найти способ надежного захвата MouseLeave - только - если он оставляет весь TreeView, включая полосу прокрутки.

Я видел одно хакерское решение обернуть его в панель с несколькими пикселями и захватить MouseLeave панели, но я вряд ли верю, что именно это Microsoft намеревалась сделать в этой ситуации.

Вкратце:

ScrollBar не запускает MouseEnter или MouseLeave для элемента управления, и это делает использование MouseEnter / MouseLeave для выдвижения элемента управления непригодным, поскольку пользователь не может использовать ScrollBar.

Каков предпочтительный способ справиться с этой ситуацией?

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Установите панель с точным размером ListBox, включая полосу прокрутки под списком Затем поместите событие mouseleave на панель.

1 голос
/ 08 января 2010

Запустите Spy ++ и выберите окно Treeview. Переместите мышь на полосу прокрутки. Там много активности, WM_NCMOUSEMOVE выглядит для меня как хороший. Поймай его в переопределении WndProc ().

...