我有一个带有上下文菜单的外壳托盘图标。我遇到的问题是从上下文菜单 Clicked 处理程序调用 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 应用程序中那样专门绑定到表单。但我看不出有什么办法。
有任何想法吗?提前感谢您的帮助!