2010-09-23 13 views
6

Ho un'applicazione basata sulla barra delle applicazioni. Ho un bel menu di scelta rapida se fai clic con il pulsante destro del mouse, tuttavia vorrei che fosse visualizzato un menu di scelta rapida diverso se facevi clic con il tasto sinistro del mouse su di esso. In questo momento faccio il menu diverso presentarsi conCome si ottiene un menu contestuale diverso se si fa clic su Lt-Click o si fa clic su Rt-clic su un'icona di notifica?

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

} 

che rende il menu di presentarsi ma cliccando il menu non farlo andare via, l'unico modo per rendere il menu scompare è fare clic su un elemento o rt fare clic sull'icona del vassoio.

Mi sono anche inventato questo trucco, ma sembra che sia il modo corretto di farlo.

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

È questo il modo corretto di farlo o c'è un modo più elegante?

risposta

6

Come nessun altro ha inviato un modo che funziona Credo che il modo corretto di farlo è

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

La soluzione funziona alla grande e ha anche risolvere qualche altro problema per me: il mio ContextMenuStrip era lontano da mousepointer, quando ho cliccato sull'icona di notifica. Ora è completamente allineato. – FrenkyB