2010-01-07 207 views
0

在TreeView,ListBox或它似乎从我的谷歌搜索任何与ScrollBar,ScrollBar不被视为控件的一部分。TreeView MouseLeave事件在滚动条上移动时触发

我有一个TreeView,我把它放在一个自定义控件中,它是Dock填充。所以它就像一个自定义的TreeView一样,它拥有我们所有的逻辑来管理它。

在我们的程序的某些部分,我们根据MouseEnter事件将其滑出,然后将其滑回到MouseLeave事件中,但是我们目前正在使用第三方库的TreeView来执行此操作,因此我一直负责进行替换。

所以我把所有的东西都移到了Windows的TreeView中,但是找不到一个可靠的捕获MouseLeave的方法 - 只有它离开了整个TreeView,包含了滚动条。

我已经看到了一个黑客解决方案,将它包装在一个具有几个像素的面板中,并捕获面板的MouseLeave,但我几乎不相信这是微软在这种情况下打算做的。

在短:

的滚动条不火的MouseEnter或鼠标离开的控制,这使得使用的MouseEnter /鼠标离开滑动了控制,因为用户无法使用滚动条无法使用。

处理这种情况的首选方法是什么?

回答

1

启动Spy ++并选择Treeview窗口。在滚动条上移动鼠标。在那里有很多活动,WM_NCMOUSEMOVE看起来对我来说很好。在WndProc()覆盖中捕获它。

+0

这是.net,无权访问WndProc或WM_NCMOUSEMOVE – 2010-01-08 20:10:10

+1

确实如此,WndProc()是TreeView类的一种方法,您可以在自己的派生类中重载该方法。 WM_NCMOUSEMOVE是一个数字,它是0xa0。检查MSDN文档。 – 2010-01-08 20:37:40

1

将一个包含列表框的确切大小的面板,包括列表框中的滚动条。 然后在面板上放置mouseleave事件。