FileDrop
Het slepen en loslaten (drag & drop) van bestanden vanuit de Windows Verkenner naar je eigen .NET applicatie formulier of control kan vrij eenvoudig geïmplementeerd worden met de DragEnter en DragDrop events. Je kan controleren of de elementen bestanden zijn (DataFormats.FileDrop) en ze dan converteren naar een array van strings.
C# voorbeeld:
private void FormFileDropTester_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void FormFileDropTester_DragDrop(object sender, DragEventArgs e)
{
string[] fileNames = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string fileName in fileNames)
{
listBox1.Items.Add(fileName);
}
}
Het wordt echter ingewikkelder als je deze source code wil herbruiken in andere formulieren of als je beperkingen wil instellen op de bestands extensies. Daarom heb ik een klein FileDrop component (C#, .NET 2.0) geschreven. Het vangt de Windows messages (WM_DROPFILES) op en gebruikt enkele Win32 API functies zoals DragQueryFile en DragFinish.
Je moet enkel die FileDrop component op je form plaatsen, een form of een control koppelen (DropControl), eventueel een lijst van toegelaten extensies invullen (AllowedFileExtensions) en het FilesDropped event uitwerken. Je kan ook een afgeleid component maken en extra logica toevoegen in de CheckAcceptFile functie.
Klasse diagram:
C# voorbeeld:
private void FormFileDropTester_Load(object sender, EventArgs e)
{
fileDrop1.AllowDrop = true;
fileDrop1.DropControl = listBox1;
fileDrop1.AllowedFileExtensions.Add("JPG");
fileDrop1.AllowedFileExtensions.Add("BMP");
}
private void fileDrop1_FilesDropped(object source, SCIPbe.Controls.FilesDroppedEventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.AddRange(e.FileNames.ToArray());
listBox1.Items.Add("DropPoint.X = " +e.DropPoint.X.ToString());
listBox1.Items.Add("DropPoint.Y = " + e.DropPoint.Y.ToString());
listBox1.Items.Add("TotalFilesCount = " + e.TotalFilesCount.ToString());
listBox1.Items.Add("AcceptedFilesCount = " + e.AcceptedFilesCount.ToString());
}
Copyrights en verspreiding
- Dit component is open source (Mozilla Public License 1.1) en mag vrij verspreid worden.
- De auteur geeft geen garantie op het foutloos werken van dit component en geeft geen support.
- Bekijk de source code voor een historiek en meer informatie over de klasses, interfaces, properties, methods, events, ...
Downloaden
- Inhoud: FileDrop component en demo programma met sources (C#, .NET 2.0, Visual Studio 2005)
- Versie: 1.1 (2006-12-23)
- Grootte: 107.3 Kb
- Auteur: Stefan Cruysberghs