Показывать контекстное меню значка уведомления после выполнения какого-либо действия
Мне нужно показать контекстное меню для моего контекстного меню значка уведомления для левого и правого щелчков после выполнения некоторых действий, а не сразу после щелчка.
Он отлично работает для левого клика как:
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
отображается правой кнопкой мыши. Есть ли способ переопределить это с моим обработчиком событий?
1 ответ
Есть два варианта.
Вариант A: не назначать контекстное меню this.ContextMenuStrip. Откройте контекстное меню вручную, когда захотите. Помните, что strip.Top и strip.Left должны иметь абсолютные координаты экрана.
Вариант Б: отмените назначение this.ContextMenuStrip OnMouseDown, если щелкнуть правой кнопкой мыши, и переназначить OnMouseUp. Смотрите этот пример.