Wie kann ich in .Net zwischen einfachen und doppelten Klicks unterscheiden?

8

Ich möchte OnMouseClick und OnMouseDoubleClick überschreiben und verschiedene Aktionen ausführen, je nachdem, welcher Klickstil verwendet wurde.

Das Problem besteht darin, dass OnMouseClick für einfache und doppelte Klicks ausgeführt wird und vor OnMouseDoubleClick aufgerufen wird.

Ich bin mir sicher, dass dies eine allgemeine Anforderung sein muss, also denke ich, dass mir etwas ziemlich Offensichtliches fehlt. Kann jemand mich ausfüllen?

Bearbeiten zum Hinzufügen: Die MouseEventArgs.Clicks-Zählung hilft nicht. Im Falle eines Doppelklicks wird der erste Klick in OnMouseClick mit MouseEventArgs.Clicks == 1 als einzelner Klick behandelt.

Zum Hinzufügen hinzufügen: Die Objekte sind Miniaturbilder. Ein einzelner Klick sollte die Auswahl für den Export ein- und ausschalten. Doppelklick sollte die Miniaturansicht zum Vollbild machen. Die Auswahl- und "Aktivierungs" -Aktionen sind orthogonal. Dies kann auf ein zugrunde liegendes Problem mit den beiden Aktionen hinweisen ...

Prost, Rob

    
Rob 20.10.2008, 14:04
quelle

4 Antworten

12

Das passiert überall in Windows. Ich glaube nicht, dass sie etwas Besonderes hinzugefügt haben, um es in .Net zu handhaben.

Das normale Mittel zur Handhabung ist

  • a) machen Sie einfach einen Klick etwas Sie würden vor einem Doppel passieren Klicken Sie auf, wie Auswählen.
  • b) Wenn das keine Option ist, dann starten Sie einen Timer im click-Event. Führen Sie die Einzelklick-Aktion im Timer-Tick aus. Wenn das Doppelklick-Ereignis zuerst auftritt, beenden Sie den Timer und führen Sie den Doppelklick aus.

Die Zeit, für die Sie die Zeit einstellen, sollte der Double-Click-Zeit des Systems entsprechen (die der Benutzer in der Systemsteuerung angeben kann). Es ist verfügbar unter System.Windows.Forms.SystemInformation.DoubleClickTime. Die vollständigen Details finden Sie im MSDN hier

    
James Curran 20.10.2008, 14:09
quelle
0

Das Problem besteht darin, dass die meisten Objekte nicht beide implementieren. Die wenigen Objekte, die vernünftigerweise unterschiedliche Aktionen für Einfach- und Doppelklicks haben können, sind im Allgemeinen OK, um die Einzelklick-Aktion vor dem Doppelklick auszuführen (markieren und dann einen Ordner öffnen, den Fokus auf eine Adressleiste setzen, bevor sie ausgewählt wird usw.) Eine Art zu bestimmen wäre wahrscheinlich, auf den einzelnen Klick für eine gewisse Zeit zu warten und die Aktion für den einzelnen Klick abzubrechen, wenn ein Doppelklick erkannt wird.

    
tloach 20.10.2008 14:11
quelle
0

Eine weitere mögliche Lösung besteht darin, dass die OnMouseDoubleClick-Funktion OnMouseClick aufruft. Da es sich bei der Aktion in OnMouseClick um eine binäre Umschaltfunktion handelt, wird sie durch zweimaliges Aufrufen auf denselben Status zurückgesetzt.

Wenn der Benutzer also doppelt klickt, ruft Windows OnMouseClick und dann OnMouseDoubleClick auf. OnMouseDoubleClick ruft OnMouseClick (erneut) auf, um den Status wiederherzustellen, und bearbeitet dann den Doppelklick.

Das ist unbefriedigend als Lösung, aber es funktioniert.

Die Verwendung eines Timers (um den ersten Klick des Doppelklicks zu schlucken) ist gleichermaßen unbefriedigend und hat die zusätzliche Schwierigkeit, die Doppelklickraten-Präferenzen des Benutzers zu handhaben.

Prost, Rob

    
Rob 20.10.2008 14:27
quelle
-1

Sie können einen Timer im OnMouseClick-Ereignishandler starten.

  • Wenn der Timer abläuft (z. B. 300 ms), ist ein einzelner Klick beabsichtigt.

Else

  • Wenn ein anderes OnMouseClick-Ereignis generiert wurde, bevor die Zeit abgelaufen ist, können Sie die x & amp; y-Position des Klicks überprüfen und wenn er innerhalb eines bestimmten Radius des ersten Klicks ist, dann die Doppelklick-Funktion ausführen.

Sonst

  • Behandeln Sie den ersten Klick und initialisieren Sie den Timer für einen zweiten Klick

Hinweis: Diese Implementierung hat den Vorteil, dass sowohl der Timeoput als auch der 'Doppelklick'-Radius unabhängig von der Systemkonfiguration konfiguriert werden können, so dass die s / w auf mehrere Maschinen importiert werden können

    
TK. 20.10.2008 14:13
quelle

Tags und Links