コンテキストメニューが付いたシェルトレイアイコンがあります。私が抱えている問題は、コンテキストメニューの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");
}
これを作成して実行すると、コンテキストメニュー項目を2回選択するだけで、画面に2つのメッセージボックスを表示できます。これはモーダルであるべきではありませんか?これを別のフォームのShowDialog()の呼び出しに置き換えると、同じ非モーダル動作になります。
私の推測では、NotifyIconは、通常のWindowsアプリケーションのように、フォームに特に関連付けられていません。しかし、私にはそれを行う方法がありません。
何か案は?助けてくれてありがとう!