2013-01-15 42 views
0

執行某些操作後,我需要爲通知圖標上下文菜單顯示上下文菜單,而不是點擊鼠標右鍵後執行某些操作。作爲執行某些操作後顯示通知圖標上下文菜單

它完全適用於左擊:

sysTrayIcon.MouseClick += OnSysTrayClicked; 

private static void OnSysTrayClicked(Object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     PerformActions(); 
     MethodInfo oMethodInfo = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic); 
     oMethodInfo.Invoke(sysTrayIcon, null); 
    } 
} 

但右擊仍自動處理和相關ContextMenuStrip在右鍵單擊顯示。有什麼方法可以用我的事件處理程序來覆蓋它嗎?

回答

2

有兩種選擇。

選項A:不要將上下文菜單分配給this.ContextMenuStrip。只要你想手動打開上下文菜單。請注意,strip.Top和strip.Left必須是絕對屏幕座標。

選項B:取消分配this.ContextMenuStrip OnMouseDown,如果鼠標右鍵並重新分配OnMouseUp。看到這個example

+0

試過選項B.它完美運作。謝謝! PS:你知道Windows如何自動顯示上下文菜單嗎?它不應該檢查並嘗試在MouseUp本身後顯示上下文菜單嗎? – sohil

+0

據我所知,它掛鉤了鼠標右鍵單擊並調用contextMenu.Show(...)。沒有辦法掛鉤。通常情況下,如果您不希望顯示菜單,則可以掛接contextMenu.Opening並將args.Cancel設置爲true。 – Matthias

+0

好的,再次感謝您。 – sohil

相關問題