myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Bei DragEnter zeitverzögert einen Klick ausführen, sofern nicht DragLeave getriggert wurde.
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Bei DragEnter zeitverzögert einen Klick ausführen, sofern nicht DragLeave getriggert wurde.

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 118


Frokuss ist offline

Bei DragEnter zeitverzögert einen Klick ausführen, sofern nicht DragLeave getriggert wurde.

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Leute,

habe ein weiteres Problem mit den Drag-Events... Und zwar habe ich mich gestern mit folgen Sachverhalt auseinander gesetzt:

Ich möchte, wenn der Anwender bei meinem Label das DragEnter-Event triggert, dass nach 500ms die Klick-Routine aufgerufen wird. Verlässt der Anwender allerdings innerhalb der 500ms wieder das Label - es wird daher DragLeave getriggert, soll die Klick-Routine nicht ausgeführt werden.

Parziel funktioniert dies auch. Allerdings kann ich die Routine nur einmal abbrechen - danach ist der ganze Sachverhalt blockiert.
Soll heißen, ich fahre mit der Maus drüber und verlasse das Feld innerhalb der 500ms, so kann ich danach nicht mehr das Drag&Drop beenden.

Dies ist mein Code:

C#-Code:
object _dragIn ;

//Das DragEnter-Event:
        private void Evt_DragEnter(object sender, DragEventArgs evt){
            _dragIn = sender;

            Helper_AsyncDragEnter(sender, evt);
        }

//Meine Hilfsfunktion:
        private async void Helper_AsyncDragEnter(object sender, DragEventArgs evt){
            await Task.Delay(500);

            if(_dragIn.Equals(sender) && _dragIn != null){
                Evt_ClickFocus(sender, (EventArgs)evt);
            }
        }

//Das DragLeave-Event
        private void Evt_DragLeave(object sender, EventArgs ect){
            _dragIn = null;
        }

Im Grund gehts mir hier um die Machbarkeit. Daher, ist dies Prinzipiel machbar, oder ist mein Gedanke hier mehr oder minder mit gewalt mittels des Kopfes durch die Wand zu kommen?

Eine alternatove Möglichkeit die mir einfallen würde, wäre eventuell über das Move-Event... Aber ob dies sinnvoller oder Performanter ist, kann ich nicht beurteilen. Im Grunde würde ich bei dem Move-Event (bzw. in dem Fall das DragEnter-Event) dann mir einen Timestamp setzen und in der Move-Routine die Differenz abfragen...

Aber vielleicht kann mir ja jemand sagen, welche der beiden alternativen sinnvoller wäre - und wenn es die erste Variante ist, was ich dafür brauche.

Liebe Grüße Frokuss
Neuer Beitrag 05.08.2019 15:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.918
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich kann Dir beim konkreten Problem nicht helfen; aber bei gewissen Sachen die Augen öffnen:

C#-Code:
    if(_dragIn.Equals(sender) && _dragIn != null){

Null-Checks sollten immer die ersten Prüfungen sein, sonst machts kein Sinn....
Neuer Beitrag 05.08.2019 18:13 Beiträge des Benutzers | zu Buddylist hinzufügen
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 118

Themenstarter Thema begonnen von Frokuss

Frokuss ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke. Habe es jetzt hinbekommen. Habe den ganzen Code neugeschrieben... Muss wohl bei mir irgendwo ein logikfehler drin gewesen sein..

Grüße Frokuss
Neuer Beitrag 13.08.2019 15:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.08.2019 15:39