Aus dem Datei-Explorer abgelegte Dateien annehmen
Benutzer ziehen Dokumente, Bilder oder Ordner aus dem Datei-Explorer auf einen Datensatz eines Rasters oder einen Knoten einer Struktur. Ihre Anwendung speichert sie so, wie sie es braucht: als Datensätze, als Pfade in einem Feld oder als Kopien in einem Ordner.
Voraussetzungen: WKL Forms Object Library 1.57 oder höher.
Lösungsüberblick
Mit AllowFileDrop = True nehmen WklGrid, WklTreeList, WklGantt und WklTreeView Dateien aus dem
Datei-Explorer an. Während der Benutzer zieht, meldet FileDragOver jedes neue Ziel; mit Cancel lehnen Sie es ab.
Nach dem Ablegen meldet FileDrop die vollständigen Pfade, den Schlüssel des Zieldatensatzes oder Zielknotens und die
Position. Das Steuerelement schreibt selbst nichts: Ihr Code in FileDrop entscheidet, was aus den Dateien wird, und
Requery zeigt danach die neuen Datensätze an.
Umsetzung
Ein Raster grdDokumente zeigt tblDokumente (ID als AutoWert, KundeID, Dateiname, Dateipfad) des aktuellen
Kunden. Abgelegte Dateien werden zu Datensätzen dieses Kunden; Ordner werden schon beim Ziehen abgelehnt.
Private Sub Form_Load()
Me!grdDokumente.Object.AllowFileDrop = True ' or in the designer: page Behavior, card Files from Explorer
End Sub
Private Sub grdDokumente_FileDragOver(ByVal Files As Variant, ByVal TargetKey As Variant, _
ByVal Position As Long, Cancel As Integer)
Dim path As Variant
For Each path In Files
If (GetAttr(path) And vbDirectory) = vbDirectory Then Cancel = True: Exit Sub
Next
End Sub
Private Sub grdDokumente_FileDrop(ByVal Files As Variant, ByVal TargetKey As Variant, ByVal Position As Long)
Dim path As Variant
For Each path In Files
CurrentDb.Execute "INSERT INTO tblDokumente (KundeID, Dateiname, Dateipfad) VALUES (" & Me!ID & ", '" & _
Replace(Mid$(path, InStrRev(path, "\") + 1), "'", "''") & "', '" & Replace(path, "'", "''") & "')", dbFailOnError
Next
Me!grdDokumente.Object.Requery
End Sub
Hinweise
- Argumente:
Filesist ein nullbasiertes Array vollständiger Pfade (mitFor EachoderUBounddurchlaufen).TargetKeyist der Schlüssel des Datensatzes oder Knotens unter dem Mauszeiger; unterhalb des letzten Eintrags, auf einer Gruppenzeile und auf der Zeile für einen neuen Datensatz ist erNull.Positionist einWklDropPosition(wdpBefore,wdpAfter,wdpInside); eine Struktur kann eine Datei damit vor, nach oder unter einem Knoten einordnen. - Halten Sie
FileDragOverkurz. Der Datei-Explorer wartet während des Ziehens auf dieses Ereignis.FileDropläuft erst nach dem Ablegen; dort dürfen Sie Meldungen anzeigen, Dateien kopieren oder den Benutzer fragen. - Nur Dateien. Text aus Word, eine E-Mail aus Outlook oder die eigenen gezogenen Knoten des Steuerelements sind keine Dateien; das Steuerelement lehnt sie ohne Ereignis ab. Um E-Mails oder Anlagen anzunehmen, speichern Sie sie zuerst in einem Ordner.
- Nur in der Formularansicht. In der Entwurfsansicht und in Berichten nimmt das Steuerelement keine Dateien an.
- Ereignisdeklarationen: Deklarieren Sie
PositionalsLongoder alsWklDropPosition(Letzteres erfordert den Verweis auf die Bibliothek der WKL Forms Object Library).Cancelmuss als Referenz übergeben werden (Cancel As Integer). - Die Einstellung wird mit dem Formular gespeichert. Sie ändert
AllowDragDropnicht; diese Eigenschaft steuert das Verschieben von Knoten innerhalb einer Struktur.