2

当用户将鼠标悬停在表格中的单元格上时,我使用 aContextMenuStrip向用户显示一些选项,Show(Control, int, int)方法是从表格的MouseMove事件中调用其方法,并将表格作为 Control 参数传入。

如果应用程序未处于活动状态,则一切都按预期工作;但如果应用程序处于活动状态,则MouseMove事件一旦显示就会停止触发ContextMenuStrip

如何在显示 ContextMenuStrip 时接收鼠标移动事件?我不想添加钩子或应用程序过滤器,我只想要非活动应用程序行为,即使应用程序处于活动状态。

4

2 回答 2

1

这不仅仅是鼠标捕获,而且很容易解决。有一个名为“ModalMenuFilter”的内部类在显示过滤各种消息的工具条下拉列表时被激活。包括 WM_MOUSEMOVE。它通过使用 SetWindowsHookEx() 来做到这一点。它在您的应用程序不活动时工作,因为此挂钩仅在您的表单处于活动状态时安装。

这些都不能从您的代码中访问,您必须使用反射。在我看来,您可以使用 ModalMenuFilter.RemoveActiveToolStrip() 禁用过滤器。看看反射器。然而,这很可能会导致其他问题。

于 2009-12-07T18:35:15.130 回答
0

这是不可能的,当显示上下文菜单条时,菜单窗口会捕获鼠标

于 2009-12-07T16:39:26.083 回答