システムトレイをベースにしたアプリケーションがあります。右クリックすると素晴らしいコンテキストメニューが表示されますが、左クリックすると別のコンテキストメニューが表示されます。今、私は別のメニューを表示させます
private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
cmsTrayLeftClick.Show(Cursor.Position);
}
}
これによりメニューは表示されますが、メニューをクリックしても消えることはありません。メニューを非表示にする唯一の方法は、アイテムをクリックするか、トレイアイコンをクリックすることです。
私もこのハックを思いついたが、それが正しい方法だと感じている。
private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
niTrayIcon.ContextMenuStrip = cmsTrayLeftClick;
MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(niTrayIcon, null);
niTrayIcon.ContextMenuStrip = cmsTrayRtClick;
}
}
これは正しい方法ですか、それとももっとエレガントな方法がありますか?