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
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
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
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.
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
Sie können einen Timer im OnMouseClick-Ereignishandler starten.
Else
Sonst
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
Tags und Links .net c# user-interface click