2010-09-07 21 views
7

This question parece apuntar a la existencia de un evento de Windows para hacer doble clic con el botón derecho. Cómo implementarlo en un formulario de Windows C#, sin embargo, es menos que claro.¿Cómo implemento un doble clic con el botón derecho para winforms?

¿Cuál es la mejor manera de implementar doble clic con el botón derecho en un control como un botón?

(Estoy pensando que debo utilizar MouseDown y realizar un seguimiento del tiempo entre clics. ¿Hay una manera mejor?)

Respuesta

5

reemplazar la función WndProc y espere el WM_RBUTTONDBLCLK, que como se puede ver en esta pinvoke la página es 0x0206.

Esa página de pinvoke también tiene algún código de muestra de C# para saber cómo hacerlo.

Siempre que vea algo sobre un mensaje de Windows y/o una API de Windows y desea usarlo en C#, el sitio de Pinvoke es un buen lugar para comenzar a buscar.

0

Pude implementar esto heredando de un botón y anulando WndProc como ho1 y se sugirió Reed. Aquí está el botón heredada:

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

he añadido el botón programáticamente a la forma y se ha suscrito a su nuevo evento DoubleRightClick. No estoy seguro de cómo generar exactamente el MouseEventArgs apropiado, pero dado que esto es solo un caso de prueba, no es importante.

2

MouseEventArgs contienen el 'Botón' de propiedad que indica el botón en el que se hizo clic. Entonces, simplemente puede verificar esto:

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