
Yop all,
Je vais vous expliquer dans ce petit tutoriel, comment faire un système de 'drag and drop' sur votre mainform en C# (Même logique qu'en c++, seul la syntaxe change).
Tout d'abord, qu'est-ce que le 'drag and drop'? J'imagine que la plupart d'entre vous connaissent déjà la réponse, c'est littéralement le fait de Glisser-déposer.
Alors comment fonctionne ce système en C# ?
A vrai dire, c'est assez simple, le système est divisé en trois parties :
- La première partie permet le 'drop' en changeant la valeur de la propriété 'AllowDrop' de l'objet/l'élément sur lequel je vais déposer un fichier (Un lien), en l’occurrence je vais faire cela sur l'élément TextBox.
- La deuxième partie consiste à appeler deux événements nommés 'DragEnter' & 'DragDrop' sur l'élément TextBox (pour ma part)
- La troisième partie est pour définir la structure des événements appelés lors du load du main
Commençons donc par le premier point qui consiste à définir la valeur de AllowDrop de l'élément en 'true', donc AllowDrop est une propriété qui autorise aux fichiers (ou autres) et aux éléments d’interagir par le biais du Drag and Drop.
Dans d'autres termes, il est obligatoire de lui définir 'true' pour pouvoir déposer un fichier (ou autre)
Alors allons-y :

Donc on lui définis la valeur 'true' dans la mainform :
public MainForm()
{
InitializeComponent();
this.TextBox1.AllowDrop = true;
}
{
InitializeComponent();
this.TextBox1.AllowDrop = true;
}

Passons maintenant à la deuxième partie qui consiste à appeler les événements toujours dans la mainform :
this.TextBox1.DragEnter += new DragEventHandler(TextBox1.DragEnter);
this.TextBox1.DragDrop += new DragEventHandler(TextBox1.DragDrop);
this.TextBox1.DragDrop += new DragEventHandler(TextBox1.DragDrop);

La troisième partie est un peu plus complexe, mais reste tout de même simple, nous allons définir la structure des événements appelés.
Retenez bien, c'est assez important, nous allons nous occuper tout d'abord du premier événement, à savoir l'évenement 'DragEnter' qui se chargera de vérifier si le fichier est bien 'Dropé' (si il est bien glissé), donc tout d'abord commençons par créer une structure de référence 'void' (qui ne retourne aucune valeur), comme nom 'TextBox1_DragEnter' (element_DragEnter) & enfin les variables 'sender' en tant qu'objet, 'e' pour la class 'DragEventArgs' :
void TextBox1_DragEnter(object sender, DragEventArgs e) {
//Vérifie si le DataFormats est valide
//Seul les fichiers dropé sont autorisé (IE, Chrome, dossiers..)
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None; //Si c'est une source inconnu, alors ignorer
}
//Vérifie si le DataFormats est valide
//Seul les fichiers dropé sont autorisé (IE, Chrome, dossiers..)
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None; //Si c'est une source inconnu, alors ignorer
}

Le deuxième événement servira quant à lui à définir une/des action(s) si la vérification réussis, donc en l'occurrence ici, je récupere sous forme de tableau ('array' / string[]), nous faisons à peu près la même structure que 'DragEnter' sauf que ça ne sera plus 'DragEnter' mais 'DragDrop'.
Nous allons définir une variable qui contiendra le chemin du fichier glissé, et une boucle qui va ajouter le chemin du fichier à chaque drag and drop et va faire un retour à la ligne pour le fichier suivant (dans mon cas, ma textbox n'est pas en multiline donc ça ne me sert à rien) :
void TextBox1_DragDrop(object sender, DragEventArgs e) {
// Extrait les données de DataObject dans 'FileList'
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
// Faites ce que vous voulez ici
// Par exemple ajouter une ligne avec le chemin du fichier glissé à chaque Drag And Drop
foreach (string File in FileList)
this.TextBox1.Text = File + "\n";
}
// Extrait les données de DataObject dans 'FileList'
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
// Faites ce que vous voulez ici
// Par exemple ajouter une ligne avec le chemin du fichier glissé à chaque Drag And Drop
foreach (string File in FileList)
this.TextBox1.Text = File + "\n";
}
Glissez vos fichier, et la, ça fonctionne ! Un système de drag and drop simple et fonctionnel
La source en pièce jointe
ENJOY !
Fichiers joints
Dernière édition: