У меня есть иконка в трее с прикрепленным контекстным меню. У меня проблема в том, что вызов ShowDialog () из контекстного меню Обработчик нажатий не приводит к модальному диалогу.
Это легко воспроизвести с помощью проекта C # по умолчанию. Просто добавьте следующий код в файл Form1.cs:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
ToolStripMenuItem contextMenuShowMsg = new System.Windows.Forms.ToolStripMenuItem();
contextMenuShowMsg.Name = "contextMenuShowMsg";
contextMenuShowMsg.Text = "Show MessageBox...";
contextMenuShowMsg.Click += new System.EventHandler(this.contextMenuShowMsg_Click);
ContextMenuStrip contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
contextMenuStrip.Items.Add(contextMenuShowMsg);
NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Text = "DlgTest";
notifyIcon.Icon = SystemIcons.Application;
notifyIcon.Visible = true;
notifyIcon.ContextMenuStrip = contextMenuStrip;
}
private void contextMenuShowMsg_Click(object sender, EventArgs e)
{
MessageBox.Show(this, "Test MessageBox");
}
Если вы создадите и запустите это, вы сможете получить два окна сообщений на экране, просто дважды выбрав пункт контекстного меню. Разве это не должно быть модальным? Замена этого на вызов ShowDialog () для другой формы приводит к тому же немодальному поведению.
Мое предположение заключается в том, что NotifyIcon специально не привязан к форме, как это было бы в типичном приложении Windows. Но я не вижу никакого способа сделать это.
Есть идеи? Заранее спасибо за любую помощь!