Показать ContextMenuStrip без его отображения на панели задач - PullRequest
6 голосов
/ 25 сентября 2008

Я обнаружил, что когда я выполняю метод show () для контекстного меню (контекстное меню), если позиция находится за пределами формы, к которой он принадлежит, он также отображается на панели задач.

Я пытаюсь создать меню для щелчка правой кнопкой мыши, когда вы нажимаете на уведомлении, но когда меню находится над панелью задач, а не внутри формы (так как форма может быть свернута при щелчке правой кнопкой мыши), оно отображается в задаче. бар по какой-то странной причине

Вот мой код:

private: System::Void notifyIcon1_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {

if(e->Button == System::Windows::Forms::MouseButtons::Right) {

        this->sysTrayMenu->Show(Cursor->Position);

    }
}

Какие другие параметры мне нужно установить, чтобы на панели задач не отображался пустой процесс.

Ответы [ 4 ]

7 голосов
/ 25 сентября 2008

Попробуйте назначить ваше меню свойству ContextMenuStrip в NotifyIcon, а не отображать его в обработчике щелчка мыши.

5 голосов
/ 28 июня 2012

Лучший и правильный путь, без отражения это:

{
  UnsafeNativeMethods.SetForegroundWindow(new HandleRef(notifyIcon.ContextMenuStrip, notifyIcon.ContextMenuStrip.Handle));
  notifyIcon.ContextMenuStrip.Show(Cursor.Position);
}

где UnsafeNativeMethods.SetForegroundWindow равно:

public static class UnsafeNativeMethods
{
  [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  public static extern bool SetForegroundWindow(HandleRef hWnd);
}
1 голос
/ 15 сентября 2011

Предположим, у вас есть 2 пункта контекстного меню: ContextMenuLeft и ContextMenuRight. По умолчанию из свойств NotifyIcon вы уже назначили одно из них. Перед вызовом Left Button Click просто измените их, откройте контекстное меню и снова измените их.

NotifyIcon.ContextMenuStrip = ContextMenuLeft; //let's asign the other one
MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(NotifyIcon, null);
NotifyIcon.ContextMenuStrip = ContextMenuRight; //switch back to the default one

Надеюсь, это поможет.

1 голос
/ 07 сентября 2009

Проблема, с которой я столкнулся, заключается в том, что мое меню доступно как при двойном среднем щелчке , так и на значке уведомления.

При щелчке правой кнопкой мыши по значку уведомления кнопка панели задач отсутствует, но когда я вручную показываю (Cursor.Position), отображается кнопка панели задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...