2011-12-19 12 views
6

Jak uzyskać wszystkie kliknięcia, aby przejść przez wydarzenie? Zauważyłem, że zbyt szybkie kliknięcie powoduje dwukrotne kliknięcie i nie wysyła kliknięć do obsługi zdarzenia. Czy istnieje sposób na uzyskanie wszystkich kliknięć?WinForms wyłącza podwójne kliknięcia i akceptuje wszystkie kliknięcia myszą?

+2

Zamiast tego użyj zdarzenia mousedown. –

+0

@RussellTroywest Myślę, że zdarzenie [MouseClick] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseclick%28VS.80%29.aspx) byłoby lepsze. Z powodu podniesienia porządku. –

+1

@Michael: Według MSDN "Dwa pojedyncze kliknięcia, które występują wystarczająco blisko, zgodnie z ustawieniami myszy systemu operacyjnego użytkownika, wygenerują zdarzenie MouseDoubleClick zamiast drugiego zdarzenia MouseClick." - Tak właśnie widzi High. –

Odpowiedz

9

Nie jestem pewien, dlaczego to pytanie dostało nagrodę, zaakceptowana odpowiedź powinna być już bardzo bliska rozwiązania. Poza tym, że zamiast MouseDown powinieneś używać MouseUp, użytkownik zazwyczaj oczekuje, że działanie kliknięcia zostanie zastosowane po zwolnieniu przycisku. Co zapewnia wycofanie się "oops, nie oznacza klikania, przesuwaj myszką, aby została zignorowana".

Jednak dla wbudowanych elementów sterujących WinForm, takich jak PictureBox, można to skonfigurować za pomocą metody Control.SetStyle(). Dodaj nową klasę do swojego projektu i wklej poniższy kod. Skompilować. Upuścić nowego sterowania z góry przybornika:

using System; 
using System.Windows.Forms; 

class MyPictureBox : PictureBox { 
    public MyPictureBox() { 
     this.SetStyle(ControlStyles.StandardDoubleClick, false); 
    } 
} 

Czy uważaj jednak, że to nie będzie działać dla klas .NET, które owijają istniejącej rodzimej sterowania systemu Windows. Podobnie jak TextBox, ListBox, TreeView itp. Podstawową konfiguracją jest flaga stylu WNDCLASSEX.style member, CS_DBLCLKS. Kod ustawiający tę flagę stylu jest zapiekany w systemie Windows i nie można go zmienić. Potrzebujesz innego rodzaju operacji, aby dwukrotnie kliknąć z powrotem w jedno kliknięcie. Można to zrobić poprzez nadpisanie metody WndProc(), dam przykład dla TextBox:

using System; 
using System.Windows.Forms; 

class MyTextBox : TextBox { 
    protected override void WndProc(ref Message m) { 
     // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK 
     if (m.Msg == 0x203) m.Msg = 0x201; 
     base.WndProc(ref m); 
    } 
} 

Wystarczy zmienić nazwę klasy, jeśli chcesz to zrobić dla innych kontroli. Commandment WinFormy, które sprawiają, że działa tak, jak chcesz, nigdy nie pobierają dużo kodu, tylko Petzold :)

-2

Myślę, że chcesz policzyć wszystkie kliknięcia. Jeśli chcesz policzyć kliknięcie, ustaw jedną zmienną licznika i zwiększ ją w zdarzeniu kliknięcia. Może ci to pomóc ...

+0

Zrób to sam i kliknij go naprawdę szybko 10 razy. Otrzymasz liczbę mniejszą niż 10. Chcę wszystkie 10 kliknięć. – Will

2

Chcesz użyć sterowania zdarzeniem MouseDown zamiast zdarzenia Click. MouseDown będzie wywoływany za każdym razem, gdy mysz zostanie "wciśnięta" na tej kontrolce. Kliknięcie nie może zostać wywołane, jeśli system uzna to za podwójne kliknięcie. Zamiast tego zostanie podniesione wydarzenie DoubleClick.

Powiązane problemy