У меня есть приложение из системного трея.У меня есть хорошее контекстное меню, если вы щелкнете по нему правой кнопкой мыши, но я бы хотел, чтобы при щелчке левой кнопкой мыши появилось другое контекстное меню.Прямо сейчас я заставляю другое меню отображаться с помощью
private void niTrayIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
cmsTrayLeftClick.Show(Cursor.Position);
}
}
. Это заставляет меню отображаться, но если щелкнуть по меню, оно не исчезнет, единственный способ заставить меню исчезнуть - это нажать наitem или rt нажмите на иконку в трее.
Я также придумал этот хак, но мне кажется, что это правильный способ сделать это.
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;
}
}
Это правильныйспособ сделать это или есть более элегантный способ?