Aktion wenn Maus für längere Zeit gedrückt wird

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Aktion wenn Maus für längere Zeit gedrückt wird

    Hallo Leute,

    ich suche nach einer Funktion die ich für folgendes verwenden möchte:

    Wenn auf einem Panel oder einer Form mit der Maus (bzw. mit dem Finger am Touchscreen) etwas länger gedrückt und gehalten wird, dann soll eine Aktion gestartet werden (z.B. Kontextmenü oder eine Auswahl was der User nun machen möchte).

    Mit Mousepress/Mousedown oder Mouseup geht das nicht. MouseMove wird wohl auch nicht passen, da ja auch sein kann, dass sich der Mauszeiger während des Drücken und gedrückt Haltens gar nicht bewegt wird.

    Was würdet Ihr hier empfehlen?
    MouseDown mit einem Timer finde ich etwas "gekünstelt". Gibt es da nicht eine saubere Lösung.

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Ich würde die Sache so angehen, dass ich im ​MouseDown eine ​Stopwatch starte und bei ​MouseUp stoppe. Dann einfach die Zeit abfagen. Sollte gehen, bin mir aber nicht sicher.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    So in der Art hätte ich mir das auch schon gedacht. Jedoch soll nicht erst wenn der Klick aufhört das Ereignis starten, sonden wenn der User länger als X Sekunden drückt.

    Bei jedem Mousedown müsste ich dann also einen Timer starten. Im Timer wird dann überprüft ob X Sekunden vergehen und immer noch gedrückt wird und dann (wenn die X Sekunden abgelaufen sind) den Timer stoppen und das Kontextmenü zeigen. Oder wenn MouseUp ausgelöst wird den timer stoppen.

    Aber das hört sich nicht sehr "sauber" an. Es gibt ja für alles irgend eine saubere Programmierlösung. Hierfür sollte es nur so einen Workaround geben? Kann ich fast nicht glauben.

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Ich finde die Sache, dass man einen Timer startet, wenn MouseDown eintritt, nicht unsauber. Du kannst die ganze Funktionalität ja kapseln.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Jou.
    MouseDown startet Timer, MouseUp stoppt ihn.
    Wird länger gedrückt als x, wird das Timer_Tick-Event ausgelöst. Dort solltest Du den Timer auch stoppen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke, dann werde ich es so machen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at