2010-09-23 9 views
6

Tengo una aplicación basada en la bandeja del sistema. Tengo un buen menú contextual si haces clic derecho sobre él, pero me gustaría que apareciera un menú contextual diferente si dejaras clic en él. En este momento hago el menú diferente aparece con¿Cómo se obtiene un menú de contexto diferente si se hace clic con la tecla Lenta o se hace clic con el botón Rt en un icono de notificación?

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

} 

Eso hace que el menú aparece pero al hacer clic en el menú no hace que desaparezca, la única manera de hacer que desaparezca el menú es hacer un clic en un elemento o Haga clic en el icono de la bandeja.

También he creado este hack pero parece que es la forma correcta de hacerlo.

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

¿Es esta la manera correcta de hacerlo o hay una manera más elegante?

Respuesta

6

Como nadie ha publicado una manera que supongo que la forma correcta de hacerlo es

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

Su solución funciona muy bien y que también ha de resolver algún otro problema para mí: mi ContextMenuStrip estaba muy lejos de mousepointer, cuando hice clic en el ícono de notificación. Ahora está completamente alineado. – FrenkyB

Cuestiones relacionadas