Показывать контекстное меню значка уведомления после выполнения какого-либо действия

Мне нужно показать контекстное меню для моего контекстного меню значка уведомления для левого и правого щелчков после выполнения некоторых действий, а не сразу после щелчка.

Он отлично работает для левого клика как:

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. Смотрите этот пример.

Другие вопросы по тегам