2010-09-07 5 views
7

This question wydaje się wskazywać na istnienie zdarzenia Windows dla podwójnie prawego kliknięcia. W jaki sposób zaimplementować go w postaci okna C# jest jednak mniej niż jasne.Jak zaimplementować podwójne kliknięcie prawym przyciskiem myszy dla winformów?

Jaki jest najlepszy sposób wdrożenia podwójnego kliknięcia prawym przyciskiem myszy na elemencie sterującym, na przykład przycisku?

(myślę, że muszę użyć MouseDown i śledzić czas pomiędzy kliknięć. Czy istnieje lepszy sposób?)

Odpowiedz

5

przesłonić funkcję WndProc i nasłuchiwać WM_RBUTTONDBLCLK, która jak widać na tym pinvoke strona to 0x0206.

Ta strona pinvoke ma również kod przykładowy C#, jak to zrobić.

Ilekroć widzisz coś na temat wiadomości Windows i/lub Windows API i chcesz go użyć w C#, strona pinvoke jest dobrym miejscem do rozpoczęcia wyszukiwania.

0

Udało mi się to zaimplementować, dziedzicząc z przycisku i przesłaniając WndProc jako sugestię ho1 i Reed. Poniżej znajduje się przycisk dziedziczone:

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

Dodałem przycisk programowo do formularza i subskrybowane do nowej imprezy DoubleRightClick. Nie jestem pewien, jak dokładnie wygenerować odpowiedni MouseEventArgs, ale ponieważ jest to tylko przypadek testowy, nie jest to ważne.

2

MouseEventArgs zawiera właściwość "Button", która wskazuje, który przycisk został kliknięty. Możesz to sprawdzić:

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