[How to] Drag And Drop

Statut
N'est pas ouverte pour d'autres réponses.

Dianophe

CTF - Designoftheday.fr
Premium
Inscription
17 Décembre 2011
Messages
108
Réactions
26
Points
11 313
RGCoins
25
1439902004-dadgraph.png


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 :

1439902113-cincinnati-line-separator.jpg


Donc on lui définis la valeur 'true' dans la mainform :

public MainForm()
{

InitializeComponent();
this.TextBox1.AllowDrop = true;

}

1439902113-cincinnati-line-separator.jpg


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);

1439902113-cincinnati-line-separator.jpg


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

}

1439903454-line-separator.gif


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";

}

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:
S'il vous plaît, évitez de changer le titre du topic ! Si c'est pour faire des fautes et enlever le préfixe en plus ><'

1439921791-2015-08-18-201532.jpg
 
J'ai édité le titre de ta discussion pour que celle-ci soit plus compréhensible.

A l'avenir essaie de faire des titres plus longs et détaillés, plus le titre est long et détaillé, plus tu obtiendras de vues ainsi que des réponses . :tchuss:
 
Au moins laisse le préfixe, car c'est c'est bel et bien du C#
 
Pourquoi le préfixe «C/C++» ? Non parce que le C et le C++ n'ont rien à voir avec le C#. Faut arrêter de fumer.
Ça serait plus logique de faire un préfixe par langage, ou à la rigueur un préfixe «C/C++» et un préfixe «C#/VB»

Sinon MSDN à déjà fait un tuto/exemple donc bon :
 
Heu, j'ai pas le choix mdr, c'est pas moi qui ai mis le .net avec le c++ x) Tu diras ça aux admins hein

Et par rapport aux préfixe le mieux serait tout simplement "*.NET"
 
https://reality-gaming.fr/threads/c...refixes-de-la-categorie-programmation.479095/ voilà

sinon *.NET* c'est beaucoup trop vague car ça regroupe :
C#, VB.NET, F#, VC++/CLI et Delphi.NET
 
J'ai édité le titre de ta discussion pour que celle-ci soit plus compréhensible.

A l'avenir essaie de faire des titres plus longs et détaillés, plus le titre est long et détaillé, plus tu obtiendras de vues ainsi que des réponses . :tchuss:
Tu à transformée faire en fiare dans le titre :lol:
 
STOP toucher merci ! C'est ouf ça
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut