Drag & Drop: Drag Enter Ereignis wird bei Dateien nicht ausgeführt

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Drag & Drop: Drag Enter Ereignis wird bei Dateien nicht ausgeführt

    Guten Tag,

    ich bin gerade dabei bestimmte Anhänge per Drag & Drop in mein Form in ein Control zu ziehen.
    Grundlegend bin ich mit Drag & Drop vertraut und habe das kopieren/verschieben diverser Steuerelemente bewerkstelligt bekommen.
    Jedoch bekomme ich es nun nicht hin das ich Dateien (aus dem Explorer) in mein Form oder Control ziehen kann.

    Das "DragEnter" Event (oder jegliches andere Event) wird nicht angesprochen.

    "ipAttachment.AllowDrop = True" ist gesetzt

    Beispiel:

    VB.NET-Quellcode

    1. Private Sub control_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles ipAttachment.DragEnter
    2. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    3. e.Effect = DragDropEffects.Copy
    4. Else
    5. e.Effect = DragDropEffects.None
    6. End If
    7. End Sub

    Ziehe ich nun mit der Maus eine Datei (pdf in meinem Beispiel) auf dieses Control wird weder das DragEnter, DragOver oder DragDrop(wäre da noch quatsch) angesprochen.

    Und ich bin gerade so ziemlich mit meinem Latein am Ende.
    Ich habe schon diverse Beispiele ausprobiert aber das ziehen von "Dateien" aus dem Explorer klappt nicht.

    Hat jemand Rat?

    VB.NET-Quellcode

    1. ipAttachment.AllowDrop = True
    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!

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ipAttachment.AllowDrop = True

    Steht doch oben das ich dies gesetzt habe.


    Edit:
    Vielleicht hilft es ja. Wenn ich auf selben Control ein anderen Control aus meinem Programm per Drag & Drop hinein ziehe, dann bekomme ich das DragEnter Event ausgelöst. Jedoch nicht bei Dateien aus dem Explorer.

    ErfinderDesRades schrieb:

    bei mir klappt das: DragDropSample

    Interessant, auch das von dir genannte Sample funktioniert nicht.
    Ich habe das beigefügte Sample heruntergeladen und bei mir gestartet, jedoch wird keines der Events bei Dateien aus dem Explorer angesprungen.

    So etwas habe ich schon befürchtet als ich folgendes Thema gelesen habe:
    [VB 2010] Drag&Drop von Dateien (aus Explorer/Desktop) in Form
    Dort scheint es ähnlich zu sein.

    Was mich ebenfalls sehr stutzig macht:
    Wenn ich das Programm von dir im Debug Modus ausführe geschieht nichts.
    Wenn ich allerdings die erstellte .exe aus dem Ordner ausführe, dann funktioniert das Drag & Drop Ereignis.
    Kann es was mit dem Visual Studio zu tun haben? Irgendwelche Einstellungen oder die Tatsache das es nur Visual Studio 2010 Express ist?
    Entschuldigt den Doppel-Post, ich habe das Problem gefunden.

    Und zwar funktioniert die Drag & Drop Funktion nicht da ich die Entwicklungsumgebung als "Administrator" aufgerufen habe.
    Wenn ich nun Dateien per Drag & Drop in das Programm einfügen wollen würde, dann funktioniert dies nur aus anderen Anwendungen die als Administrator aufgerufen worden sind. Und das sind die einzelnen Explorer Fenster wohl nicht.


    Ich habe nun die Entwicklungsumgebung ohne Administratoren Berechtigungen geöffnet und es funktioniert nun auch im Debug Modus.
    Ob die allerdings so ganz das Wahre ist, ich weiß ja nicht....

    Aber das könnte wenigstens einigen helfen die danach suchen. Das Problem schien wohl so einige male mehr im Internet ohne Lösung gewesen zu sein.

    Ich bedanke mich
    Kann das sein, dass man einen Dateibrowser garnet als Admin starten kann? Meine Versuche scheiterten nämlich. Ist für mich nicht soo schlimm, weil ich mir schon vor längerem einen eigenen Dateibrowser gebastelt habe, der als Admin startebar ist, aber sonst würde das schon nerven, weil VisualStudio starte ich als Admin, Browser und Email laufen aber als Normal-Account.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Genau dieses Problem habe ich auch und suche gerade nach einer Lösung.
    Mein Proggi muss mit erweiterten Rechten gestartet werden, um einige Funktionen korrekt ausführen zu können.
    Nun meldet sich ein Kunde, dass er damit keine Ordner und Dateien aus dem Win-Explorer in mein Proggi Draggen kann.
    Habe es nachgestellt.
    Wenn ich Q-Dir (Win-Explorer-Ersatz) mit erweiterten Rechten starte, klappt das DragDrop aus diesem in mein Proggi.
    Nicht aber, wenn dieser normal gestartet wird.
    Der Win-Explorer lässt sich ja gar nicht mit erweiterten Rechten starten.

    Im Debug-Mode (VS2022 mit normalen Rechten gestartet) funktioniert es problemlos mit dem Draggen aus dem Win-Explorer bzw. dem normal gestarteten Q-Dir und Droppen in mein Proggi.
    Wird das Release mit normalen Rechten gestartet, klappt es auch.
    Ist das Release mit erhöhten Rechten am rennen und Q-Dir ebenfalls, klappt das DragDrop.
    Im Release klappt es aber nicht, wenn dieses mit erhöhten Rechten gestartet wird und der Q-Dir nur mit normalen Rechten läuft.

    Hat jemand vielleicht für dieses Problem schon eine Lösung gefunden?

    Wäre supi.

    EDIT: P.S. Nicht mal mit der UAC auf niedrigster Stufe ändert sich diese Symptomatik.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dideldum“ ()

    -Drag&Drop rausschmeißen, die Mausschieberei ist doch eh doof.

    -Vielleicht lässt sich das mit den erweiterten Rechten auch anders lösen? Indem z.B. der User alle benötigten Rechte bekommt. Macht für mich wenig Sinn, dass die Anwendung von extern mehr darf als der User.

    -Das Internet sagt mit deaktivierter Benutzerkontensteuerung geht es, habs aber nicht ausprobiert.

    Haudruferzappeltnoch schrieb:

    mit deaktivierter Benutzerkontensteuerung geht es

    Das geht, soweit ich weiß, nicht. Meiner Meinung nach kann es für das Problem keine Lösung geben, denn es handelt sich um ein Sicherheitsfeature. Könnte ein unprivilegierter Nutzer Dateien in eine Admin-Umgebung schieben, so wäre das eine Sicherheitslücke.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi Ihr Zwei,

    danke Euch für Eure Posts :)

    @Haudruferzappeltnoch,
    auf meinem System funktioniert es mit der UAC auf niedrigster Stufe auch nicht.
    Ich habe das DragDrop auch nur auf Kundenwunsch hin in mein Proggi gepackerlt.
    Ich hasse ebenfalls DragDrop - ein lose linke Maustaste und das Zeugerl landet überall, nur nicht da, wo es hin soll.
    Persönlich Kopiere und verschiebe ich nur via Kontextmenu.

    EDIT: Mein Proggi braucht u.a. die erweiterte Rechte, da sich nur so die Exe-Namen aller aktiven Fenster auslesen lassen. Bei normalem Start können manche Exe-Namen nicht ausgelesen werden. Das Senden von Objekt-Inhalten an solche Anwendungen ist dann nicht möglich.
    Und für die Screenshot-Funktion in meinem Proggi mit der Druck-Taste bzw Alt+Druck auch.

    @Marcus Gräfe
    Stimmt schon - aber m.E. sollte der User dennoch die Möglichkeit haben, auf expliziten Wunsch hin den Win-Explorer mit erweiterten Rechten zu starten.
    Ist halt echt doof, dass man dazu eine Dritt-Anwendung braucht, um einen Explorer mit Admin-Rechten zu haben.
    Ich benutze eh nur den Q-Dir - mir ist das somit einerlei.
    Aber mein Kunde will unbedingt den Win-Explorer nutzen und auf keinen anderen Explorer-Clone wechseln.
    Na, dann muss der halt mit Kontextmenu Kopieren und Ausschneiden fummeln, wenn es hierfür keine Lösung gibt.
    Sehe ich eh als sicherer an (siehe oben).

    Edit:
    Diese Lösung kann ich meinem Kunden nicht zumuten:
    windows-faq.de/2021/05/20/wind…ls-administrator-starten/

    Selbst, wenn ich die Explorer.exe als Admin starte, funktioniert das DragDrop zwischen diesem und menem Proggi nicht. :S

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dideldum“ ()

    @Haudruferzappeltnoch,
    das kann der Benutzer in meinem Proggi natürlich auch - mit OpenFolder- und OpenFile-Dialogen Ordner und Dateien importieren. Aber dies halt nur als Kopiervorgang und nicht als Verschiebe-Prozess, was ab und an erforderlich sein kann.
    Der umgekehrte Weg - also von meinem Proggi an eine Dritt-Anwendung zu kopieren bzw. verschieben, ist allerdings in meinem Programm nicht integriert.
    @Dideldum Hier könnte das Interface IExplorerBrowser evtl. ein Ansatz sein. Nur so ein Gedanke, wenn Du Dein Programm mit administrativen Rechten startest und Du aus Deinem Programm heraus einen eigenen Explorer per IExplorerBrowser anbietest, dann müsste dieser Explorer die gleichen Rechte besitzen wie Dein Programm. Ich hab das jetzt zwar nicht getestet, sollte aber vom Gedanken her funktionieren.
    Mfg -Franky-

    -Franky- schrieb:

    Ich hab das jetzt zwar nicht getestet
    So isses, das hab ich mal untersucht.
    D&D geht nur zwischen Programmen mit gleichen Admin-Rechten.
    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!

    RodFromGermany schrieb:

    D&D geht nur zwischen Programmen mit gleichen Admin-Rechten.
    Würde ja bedeuten, dass ein Prozess mit Adminrechten nicht als Quelle für einen D&D-Vorgang dienen könnte, wenn das Ziel ein Prozess ohne Adminrechten wäre. Ist dem so?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.