2009-12-07 64 views
2

我正在使用ContextMenuStrip向用戶顯示一些選項,方法是通過在表的MouseMove事件中調用其Show(Control, int, int)方法,將該表作爲Control參數傳入表中。如何在顯示ContextMenuStrip時接收鼠標移動事件?

如果該應用程序未處於活動狀態,則所有內容均按預期工作;但是如果應用程序處於活動狀態,則在顯示ContextMenuStrip後,MouseMove事件將停止發射。

如何在顯示ContextMenuStrip的同時接收鼠標移動事件?我不想添加掛鉤或應用程序過濾器,我只是希望即使在應用程序處於活動狀態時仍處於非活動狀態。

+0

你只是顯示信息,或者你是否讓用戶點擊ContextMenuStrip來做出什麼事情? – Stewbob 2009-12-07 19:31:51

回答

0

這是不可能的,在顯示的上下文菜單條,菜單窗口捕獲鼠標

+0

那麼爲什麼它在應用程序不活動時工作? – Simon 2009-12-07 16:59:13

+0

你是什麼意思,「應用程序無效」? – serhio 2009-12-07 18:07:42

1

它不只是一個鼠標捕獲,這將是容易解決。有一個名爲「ModalMenuFilter」的內部類,當顯示過濾各種消息的工具欄下拉菜單時,該類將被激活。包括WM_MOUSEMOVE。它通過使用SetWindowsHookEx()來完成。它在你的應用程序不活動時起作用,因爲這個鉤子只在你的表單處於活動狀態時才安裝。

這些都不能從您的代碼訪問,您必須使用Reflection。在我看來,你可以使用ModalMenuFilter.RemoveActiveToolStrip()來禁用過濾器。用Reflector觀察一下。但這很可能會導致其他問題。

相關問題