Я использую класс NotifyIcon
для отображения значка на панели задач. Значок выполняет 2 функции - когда пользователь нажимает левой кнопкой мыши левой кнопкой мыши, он должен отображать окно, когда пользователь щелкает правой кнопкой мыши, он должен отображать контекстное меню. Это отлично работает, кроме окна, отображаемого после того, как пользователь нажимает кнопку в контекстном меню. Вот мой код:NotifyIcon ContextMenu и слишком много событий click
contextMenuItems = new List<MenuItem>();
contextMenuItems.Add(new MenuItem("Function A", new EventHandler(a_Clicked)));
contextMenuItems.Add(new MenuItem("-"));
contextMenuItems.Add(new MenuItem("Function B", new EventHandler(b_Clicked)));
trayIcon = new System.Windows.Forms.NotifyIcon();
trayIcon.MouseClick += new MouseEventHandler(trayIcon_IconClicked);
trayIcon.Icon = new Icon(GetType(), "Icon.ico");
trayIcon.ContextMenu = contextMenu;
trayIcon.Visible = true;
Проблема заключается в том, что мой trayIcon_IconClicked
событие вызывается, когда пользователь выбирает «Функция» или «Function B». Почему это происходит?
Спасибо, J
Спасибо, есть способ сто p он использует NotifyIcon в качестве целевого элемента управления? Или, может быть, даже всплывающее меню вручную? Я пробовал ContextMenu.Show(), но для этого требуется элемент управления как параметр и, похоже, не срабатывает всплывающее событие. – JWood
Выполняете ли вы щелчок правой кнопкой мыши в обработчике кликов события trayIcon_IconClicked? Если да, то нет. Настройка свойства ContextMenu автоматически обрабатывает событие щелчка правой кнопкой мыши любого элемента управления, которому назначено контекстное меню, поэтому вам больше не нужно его обрабатывать. Вот почему он был исключен в событии trayIcon_IconClicked, потому что вы просто дублируете события. Попробуйте и дайте мне знать. – SPFiredrake
Я не обрабатывал клик вручную, я устанавливал свойство ContextMenu, но это дает поведение при запуске события trayIcon_IconClicked, когда пользователь выбирает элемент из контекстного меню. Вышеприведенный пример не работает, поскольку «это» является объектом приложения. Я собираюсь попробовать ContextMenuStrip и посмотреть, дает ли это лучшие результаты. – JWood