Entwickler-Ecke

.NET - [WinForms] Dateien (und Ordner) per Drag 'n Drop empfangen


Christian S. - So 25.04.04 23:11
Titel: [WinForms] Dateien (und Ordner) per Drag 'n Drop empfangen
Dateien (und Ordner) per Drag 'n Drop empfangen
Um Dateien (und Ordner) per Drag 'n Drop aus dem Explorer auf eine Komponente des Programmes zu Empfangen, sind folgende Schritte notwendig:

(1) Bei der entsprechenden Komponente muss "AllowDrop" auf "true" gesetzt werden
(2) Im DragEnter-Event der Komponente ist folgender Code unterzubringen (hier am Beispiel einer Listview):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TMainForm.fileList_DragEnter(sender: System.Object; e: System.Windows.Forms.DragEventArgs);
begin
  if (e.Data.GetDataPresent(DataFormats.FileDrop)) then //Werden auch wirklich Dateien gezogen?
    e.Effect := DragDropEffects.Copy //Jeder Effekt ist möglich, nur nicht "None", das würde blockieren
  else
    e.Effect := DragDropEffects.None;
end;


(3) Um nun an die Dateien zu kommen, platziert man noch folgenden Code im OnDragDrop-Event (auch am Beispiel einer ListView):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TMainForm.fileList_DragDrop(sender: System.Object; e: System.Windows.Forms.DragEventArgs);
type strArr = Array Of String//brauchen wir für den Cast
var files : strArr;
    i : Integer;
begin
  files := strArr(e.Data.GetData(DataFormats.FileDrop));
  //hier stehen jetzt alle Dateien bzw. Ordner drin, die gezogen wurden
  for i:=0 to High(files) do
  begin

    //Handelt es sich um einen Ordner?
    if (System.IO.FileAttributes.Directory
    and System.IO.File.GetAttributes(files[i])) = System.IO.FileAttributes.Directory
    then MessageBox.Show('Verzeichnis: '+files[i])
    else MessageBox.Show('Datei: '+files[i]);
  end;
end;


So fertig. Anstatt der MessageBoxes kann man natürlich nun mit den Ordner und Dateien machen, was man will.
Moderiert von user profile iconjasocul: Beitrag geprüft am 05.05.2006
[meta]Drag Drop .NET Dateien Ordner[/meta]