2010-09-23 26 views
6

J'ai une application qui est basée sur la barre d'état système. J'ai un joli menu contextuel si vous faites un clic droit dessus mais j'aimerais qu'un menu contextuel différent apparaisse si vous avez cliqué dessus. En ce moment, je fais le menu différent montrer avecComment obtenez-vous un menu contextuel différent si vous cliquez ou cliquez sur Rt-Click sur une icône de notification?

private void niTrayIcon_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
    { 
     cmsTrayLeftClick.Show(Cursor.Position); 
    } 

} 

Cela fait le menu apparaître, mais en cliquant sur le menu ne fait pas disparaître, la seule façon de faire disparaître le menu est soit cliquer sur un élément ou Cliquez sur l'icône de la barre d'état.

J'ai aussi trouvé ce bidouillage mais il me semble que c'est la bonne façon de le faire.

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; 
    } 
} 

Est-ce la bonne façon de le faire ou existe-t-il un moyen plus élégant?

Répondre

6

Comme personne d'autre a affiché une manière qui fonctionne, je suppose que la bonne façon de le faire est

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; 
    } 
} 
+0

Votre solution fonctionne très bien et il a aussi résoudre un autre problème pour moi: mon ContextMenuStrip était bien loin de mousepointer, lorsque j'ai cliqué sur l'icône de notification. Maintenant, il est complètement aligné. – FrenkyB