2010-03-19 36 views
1

我想在左鍵單擊NotifyIcon時顯示上下文菜單。只是調用NotifyIcon.ContextMenuStrip.Show()不能很好地工作。 A solution has been posted here before調用一個祕密方法使用反射:顯示NotifyIcon上下文菜單並控制其位置?

Dim mi As System.Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic) 
mi.Invoke(Icon, Nothing) 

這個偉大的工程,但我還需要其中顯示菜單控制。我想等待SystemInformation.DoubleClickTime在接收NotifyIcon.MouseUp事件和顯示菜單之間過去,以便我可以分別處理單擊和雙擊。但調用ShowContextMenu方法時會在ShowContextMenu被調用時顯示當前鼠標位置的菜單,而不是實際單擊圖標時的菜單。這意味着如果在DoubleClickTime中鼠標移動,菜單將顯示在屏幕的不同部分。因此,如果我可以控制顯示菜單的位置,則可以在收到MouseUp事件時保存鼠標座標,然後確保菜單顯示在圖標旁。有沒有辦法做到這一點?

在此先感謝。

回答

0

嗯,我剛剛發現有現有的程序表現出這種相同的行爲。我剛剛瀏覽了系統托盤中的所有圖標,其中大約一半是這樣做的。如果在出現菜單之前拖動圖標,然後在延遲期間移動鼠標,菜單將出現在最後一個鼠標位置,無論位於屏幕上的哪個位置。 Snagit是這樣做的一個應用程序。 Outlook是我的托盤中唯一一個總是顯示點擊圖標的菜單的程序。但Snagit看起來像使用.NET ContextMenuStrip,而Outlook可能使用本機菜單。

因此,這是標準行爲,或者是其他人無法解決的問題。而作爲用戶,我從來沒有注意到這種行爲,直到昨天我正在測試我自己的應用程序。所以我想這不是什麼大事,我不會爲此擔心。