2010-09-07 14 views
7

This question sembra indicare l'esistenza di un evento di Windows per un doppio clic con il pulsante destro del mouse. Come implementarlo in un modulo di Windows C, tuttavia, è meno chiaro.Come implementare un doppio clic con il pulsante destro del mouse per Winforms?

Qual è il modo migliore per implementare il doppio clic con il pulsante destro del mouse su un controllo come un pulsante?

(sto pensando io devo usare MouseDown e tenere traccia del tempo tra i clic. C'è un modo migliore?)

risposta

5

ignorare la funzione WndProc e ascolto per WM_RBUTTONDBLCLK, che come si può vedere su questo pinvoke la pagina è 0x0206.

Quella pagina pinvoke ha anche qualche codice di esempio C# per come farlo.

Ogni volta che si vede qualcosa su un messaggio di Windows e/o API di Windows e si desidera utilizzarlo in C#, il sito pinvoke è un buon punto di partenza per la ricerca.

0

Sono stato in grado di implementarlo ereditando da un pulsante e sovrascrivendo WndProc come suggerito da ho1 e Reed. Ecco il tasto ereditato:

public class RButton : Button 
{ 
    public delegate void MouseDoubleRightClick(object sender, MouseEventArgs e); 
    public event MouseDoubleRightClick DoubleRightClick; 
    protected override void WndProc(ref Message m) 
    { 
     const Int32 WM_RBUTTONDBLCLK = 0x0206; 
     if (m.Msg == WM_RBUTTONDBLCLK) 
      DoubleRightClick(this, null); 
     base.WndProc(ref m); 
    } 
} 

ho aggiunto il pulsante programatically per la forma e il sottoscritto al suo nuovo evento DoubleRightClick. Non sono sicuro di come generare esattamente l'appropriato MouseEventArgs ma poiché questo è solo un caso di test, non è importante.

2

MouseEventArgs contiene la proprietà "Pulsante" che indica che il pulsante è stato selezionato. Quindi puoi semplicemente verificare:

private void MouseDoubleClickEventHandler(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      DoSomthing(); 
     } else if (e.Button == MouseButtons.Right) 
     { 
      DoSomethingElse(); 
     } 
    } 
Problemi correlati