Назначая контекстное меню элементу управления NotifyIcon, он автоматически ловит щелчок правой кнопкой мыши и открывает там назначенное контекстное меню. Если вы хотите выполнить некоторую логику до фактического отображения контекстного меню, назначьте делегат событию contextMenu.Popup.
...
contextMenu.Popup += new EventHandler(contextMenu_Popup);
...
private void trayIcon_IconClicked(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
//Do something here.
}
/* Only do this if you're not setting the trayIcon.ContextMenu property,
otherwise use the contextMenu.Popup event.
else if(e.Button == MouseButtons.Right)
{
//Show uses assigned controls Client location to set position,
//so must go from screen to client coords.
contextMenu.Show(this, this.PointToClient(Cursor.Position));
}
*/
}
private void contextMenu_Popup(object sender, EventArgs e)
{
//Do something before showing the context menu.
}
Я полагаю, почему всплывающее окно открывается: контекстное меню, которое вы открываете, использует NotifyIcon в качестве целевого элемента управления, поэтому при нажатии на него запускается обработчик щелчка, назначенный для NotifyIcon.
Редактировать: Другой вариант, который следует рассмотреть, - это использовать ContextMenuStrip. NotifyIcon также имеет свойство ContextMenuStrip, и, похоже, с ним связано гораздо больше функциональности (заметил, что я мог бы сделать больше, программируя мудро). Возможно, стоит попробовать, если по какой-то причине все работает не так.