Frage

Ich möchte OnMouseClick und OnMouseDoubleClick und führen verschiedene Aktionen außer Kraft zu setzen, je nach dem Klick-Stil verwendet wurde.

Das Problem ist, dass OnMouseClick für Einzel- und Doppelklicks geschieht, und wird vor OnMouseDoubleClick genannt zu werden.

Ich bin sicher, dass dies eine häufige Anforderung sein muss, so dass ich denke, ich etwas ziemlich offensichtlich abhanden bin. Kann jemand füllt mich in?

Bearbeiten, um hinzuzufügen: die MouseEventArgs.Clicks Zahl hilft nicht. Im Fall von einem Doppelklick wird der erste Klick als einzigen Klick in OnMouseClick behandelt mit MouseEventArgs.Clicks == 1.

Bearbeiten, um hinzuzufügen: die Objekte Bild Thumbnails. Mit einem Klick sollte Auswahl ein- und ausschalten für den umzuschalten. Doppelklicken Sie sollten die Miniaturansicht Vollbild machen. Die Auswahl und die „Aktivierung“ Aktionen sind orthogonal. Dies kann ein tiefes liegendes Problem mit den beiden Aktionen zeigen ...

Cheers, Rob

War es hilfreich?

Lösung

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

Die normalen Mittel der Umgang mit diesem ist

  • a) nur einzigen Klick etwas machen Sie würden wollen, bevor ein Doppel passieren klicken, wie wählen.
  • b) wenn das keine Option ist, dann auf dem Click-Ereignisse, einen Timer starten. Auf dem Timer-Tick, tut die einzige Klick Aktion. Wenn der Doppelklick-Ereignis zuerst eintritt, töten den Timer, und führen Sie die Doppelklickaktion.

Die Zeit, die Zeit eingestellt für soll auf das System der Doppelklickzeit (die der Benutzer in der Systemsteuerung festlegen kann) gleich sein. Es ist von System.Windows.Forms.SystemInformation.DoubleClickTime zur Verfügung. Die vollständigen Einzelheiten sind in der MSDN, hier

Andere Tipps

Das Problem ist, dass die meisten Objekte nicht beide implementieren. Die wenigen Objekte, die vernünftigerweise können verschiedene Aktionen für Einzel- und Doppelklicks haben in der Regel sind OK die einzigen Klick Aktion vor dem Doppelklick Aktion (markieren dann öffnen Sie einen Ordner, geben Sie Fokus auf eine Adressleiste vor der Auswahl es, etc.) laufen Die einzige Weg wäre wahrscheinlich zu bestimmen, auf dem einzigen Klick für einen Betrag von Zeit zu warten und die Aktion für den einzigen Klick stornieren, wenn ein Doppelklick erkannt wird.

Eine andere mögliche Lösung ist es, die OnMouseDoubleClick Funktionsaufruf OnMouseClick zu haben. Da die Aktion in OnMouseClick eine binäre Toggle ist, nennt es zweimal setzt sie auf den gleichen Zustand.

So

, wenn der Benutzer doppelklickt, Fenster ruft OnMouseClick, dann OnMouseDoubleClick. OnMouseDoubleClick ruft OnMouseClick (wieder), um den Zustand wiederherzustellen, dann den Doppelklick behandelt.

Das fühlt sich unbefriedigender als Lösung, aber es funktioniert.

Mit einem Timer (den ersten Klick auf dem Doppelklick zu schlucken) ist ebenso unbefriedigend, und hat die zusätzliche Komplikation der Benutzer-Doppelklickrate Präferenzen Handhabung.

Cheers, Rob

Sie können einen Timer im OnMouseClick Ereignisbehandlungsroutine starten.

  • Wenn der Timer abläuft (sagen 300ms), dann wird ein einzelner Klick gedacht.

Else

  • Wenn ein anderer OnMouseClick Ereigniszeiten generiert wurde, bevor die Zeit konnte man die x & y-Position des Klicks und wenn ihr in einem bestimmten Radius des ersten Klick dann Aktion der Doppelklick-Funktionalität prüfen.

Ansonsten

  • ersten Klick Griff und neu initialisieren Timer für die zweiten Klick

Hinweis: Diese Implementierung hat den Vorteil, dass sowohl die timeoput und die ‚doppelklicken Sie auf‘ Radius unabhängig voneinander von der Systemkonfiguration konfiguriert werden kann, so dass die s / w auf mehrere Maschinen importiert werden /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top