Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0100: Dateihandling mit OLE Drag und Drop

 von 

Beschreibung 

Wie einfach Drag and Drop in VB zu realisieren ist, zeigt dieses Beispiel. Hiermit können Dateien aus dem Explorer, Desktop, etc. in die eigene Anwendung gezogen werden. Zudem wird gezeigt, wie daraufhin die 'gedroppte' Datei als Textdatei eingelesen wird.

Dieser Tipp wurde am 07. April 2005 von Jochen Wierum mit Tipp 502 zusammgengeführt. Er zeigt nun das "Draggen" und das "Droppen" in einer Anwendung.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,67 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Festplattenauswahlliste "Drive1"
' Steuerelement: Verzeichnisauswahlliste "Dir1"
' Steuerelement: Dateiauswahlliste "File1"
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Textfeld "Text1"

Option Explicit

Private Sub Command1_Click()
    List1.Clear
    Text1 = ""
End Sub

Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub File1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
    Dim i As Integer
    
    ' Puffer leeren
    Data.Clear
    
    ' Alle Ausgewählten Dateien einfügen
    For i = 0 To File1.ListCount - 1
        If File1.Selected(i) Then
        
            Data.Files.Add File1.Path & IIf(Right(File1.Path, 1) = "\", "", _
                "\") & File1.List(i)
            
        End If
    Next i
    
    ' Datentyp setzen
    Data.SetData , vbCFFiles
End Sub

Private Sub Form_Load()
    'File1.MultiSelect = 2
    'File1.OLEDragMode = 1
    'Text1.OLEDropMode = 1
End Sub

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, _
    Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    Dim i As Integer
    
    If Data.GetFormat(vbCFFiles) Then
        For i = 1 To Data.Files.Count
            List1.AddItem Data.Files.Item(i)
        Next i
    End If
End Sub

Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, _
    Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    Dim FN As Integer
    Dim buf As String
    
    Text1.Text = ""
    
    If Data.GetFormat(vbCFFiles) Then
        FN = FreeFile
        Open Data.Files.Item(1) For Input As #FN
            Do Until EOF(FN)
                Line Input #1, buf
                Text1.Text = Text1.Text & buf & vbCrLf
            Loop
        Close FN
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 6 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Stefan Blum am 30.10.2007 um 10:14

Hallo Zusammen weiß jemand wie ich den Code umbauen muss so das der Dateiname in der Listbox erschein wenn ich die Datei nur auf den Rahmen der Form ziehe und nicht in die Listbox?

Gruß
Stefan

Option Explicit
Private Sub List1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
Dim i As Integer
' Puffer leeren
Data.Clear
' Alle Ausgewählten Dateien einfügen
For i = 0 To File1.ListCount - 1
If File1.Selected(i) Then
Data.Files.Add File1.Path & IIf(Right(File1.Path, 1) = "\", "", _
"\") & File1.List(i)
End If
Next i
' Datentyp setzen
Data.SetData , vbCFFiles
End Sub
Private Sub Form_Load()
List1.OLEDropMode = 1
List1.OLEDragMode = 1
Form1.OLEDropMode = 1
End Sub
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, _
Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer
If Data.GetFormat(vbCFFiles) Then
For i = 1 To Data.Files.Count
List1.AddItem Data.Files.Item(i)
Next i
End If
End Sub

Kommentar von Klaus Banek am 06.06.2002 um 17:17

Hallo, hätte noch eine Frage zu OLE Objekten. Wie kann man per Code auf die Objekteigenschaften wie z.B. Dateierstellungsdatum, Dateigröße, Dateiname und Pfad usw. zugreigen?
vielen Dank für die Hilfe!
mfg
Klaus B.

Kommentar von Vesa Järvensivu am 29.11.2001 um 16:19

Drag drop question: I use characters 0 to 255, and there is not format for Data that suits. If I use vbCFText then it's truncated when it arrives when chr(0) is found...I'm looking for Win API functions RegisterClipboardFormat examples...Thankful for help :)
Vesa, Sweden

Kommentar von Nadine Fassbender am 13.11.2001 um 22:01

Hab eine Frage zum FlexGrid!
Und zwar hab ich zwei Spalten.
In der einen steht zum Bsp.Wert;in der anderen Anzahl!
Wenn ich nun eine Zahl eingebe,die im Feld "Wert" steht, möchte ich automatisch die Anzahl dieser "Zahl" in der 2.Spalte erscheinen lassen.Wie sprech ich Spalte 2 an?

Kommentar von i.seika am 06.08.2001 um 22:03

Suche dringend eine Lösung zu Drag and Drop !!
Habe Windows 95, aber D+d funktioniert einfach nicht !!
Kann nichts "ziehen" oder bewegen-alles bleibt da, wo es ist...
gibt es eine "Aktivierung", die ich als einfacher Anwender durchführen kann ? War schon in "regedit.exe", kann
ich von dort etwas ändern ??
Bin für eine Lösung sehr dankbar...
Mfg
iris Seika

Kommentar von Michael Werner am 13.03.2001 um 04:31

schreiben Sie doch in ihren einleitenden kommentar rein, dass
voreingestellt sein muss:
OleDropMode=1 (Manuell) für List1 u. Text1
mfg
michael w.