我有一个应用程序,它基于系统托盘。如果您右键单击它,我有一个漂亮的上下文菜单,但是如果您左键单击它,我希望显示不同的上下文菜单。目前,我使用以下方法显示不同的菜单:
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;
}
}
这是正确的方法吗?还是有更加优雅的方式呢?