Accueil > > > DRAG DROP ENTRANT ET CLIPBOARD : MÊME COMBAT !
DRAG DROP ENTRANT ET CLIPBOARD : MÊME COMBAT !
Information sur la source
Description
Le drag and drop permet d'améliorer de façon considérable un interface utilisateur. Cependant, le drag and drop n'est pas seulement interne à un appli, il peut aussi être externe. Un tas de cellules sélectionnées dans Excel par exemple peut très bien attérir sur votre appli. A vous de savoir si vous voulez les gérer ou non. La récupération des données envoyées lors d'un drag and drop est assez simple. L'application qui fournit les infos peut les envoyer sous plusieurs formes. Par exemple, Excel envoie ses cellules déplacées sous forme d'un XML, de texte, d'image... Il est alors possible de récupérer ces formats (sous la forme d'un tableau de strings), et de dire si oui ou non on peut accepter le drag and drop. Cette opération se fait alors que la souris survole la zone de notre appli, et que le drag and drop n'est pas effectué. Un fois le drop effectué, c'est à dire quand l'utilisateur termine le drag and drop, on cherche alors à récupérer les données. Pour vous aider à gérer votre drag and drop entrant, je vous propose cette source. Si vous voulez gérer les infos en provenance d'Excel, par exemple, utiliser mon appli pour y droper des données Excel. Vous pourrez alors voir tous les types de données envoyés par exel, et la plupart du temps leur contenu. Dans le titre, je parle du presse-papier (clipboard) pour la bonne et simple raison que la donnée y est gérée de la même manière. On récupère un objet implémentant l'interface IDataObject, sur lequel on récupère les formats de données dispos, puis les infos en elles même.
Source
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Xml;
-
- namespace DragDropIn {
- public partial class Form1 : Form {
- /// <summary>
- /// Variable permettant de stocker les données envoyées à notre programme par drag and drop.
- /// </summary>
- private Hashtable Data;
-
- /// <summary>
- /// Cet évènement survient lorsque la souris arrive sur notre formulaire lors d'une
- /// opération de drag and drop.
- /// On demande alors à l'évènement e (DragEventArgs) quels sont les types de données
- /// que l'on peut récupérer, et on les liste dans le listview de la form.
- /// </summary>
- private void Form1_DragEnter(object sender, DragEventArgs e) {
- ListFormats(e.Data);
- e.Effect = DragDropEffects.All;
- }
-
- /// <summary>
- /// Cet évènement survient à la fin de l'opération de drag and drop, lorsque la souris est "relachée"
- /// sur notre formulaire.
- /// On récupère alors tous les type des données que l'on a stocké dans notre list view,
- /// on demande à l'objet e (DragEventArgs) tous les objets possibles, et on
- /// les stocke dans un hash table.
- /// </summary>
- private void Form1_DragDrop(object sender, DragEventArgs e) {
- GetAllData(e.Data);
- }
-
- /// <summary>
- /// Lorsque l'on clique sur un élément de la liste des types envoyés par le drag and drop,
- /// on affiche l'objet correspondant.
- /// L'objet est affiché dans un propertygrid, et quand c'est possible dans une zone
- /// de texte ou dans un zone d'image.
- /// </summary>
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
- ResetUI();
- try {
- this.propertyGrid1.SelectedObject = Data[this.listBox1.SelectedItem.ToString()];
-
- if(this.propertyGrid1.SelectedObject.GetType() == typeof(Bitmap)) {
- this.pictureBox1.Image = (Bitmap) this.propertyGrid1.SelectedObject;
- }
-
- if(this.propertyGrid1.SelectedObject.GetType() == typeof(string)) {
- this.textBox1.Text = (string) this.propertyGrid1.SelectedObject;
- }
-
- if(this.propertyGrid1.SelectedObject.GetType() == typeof(System.IO.MemoryStream)) {
- System.IO.StreamReader reader = new System.IO.StreamReader((System.IO.MemoryStream) this.propertyGrid1.SelectedObject);
- this.textBox1.Text = (string) reader.ReadToEnd();
- }
-
- if(this.propertyGrid1.SelectedObject.GetType() == typeof(XmlDocument)) {
- this.textBox1.Text = ((XmlDocument) this.propertyGrid1.SelectedObject).InnerXml;
- }
- } catch { }
- }
-
- /// <summary>
- /// Méthode permettant de réinitialiser la zone de visualisation d'image et de texte.
- /// </summary>
- private void ResetUI() {
- this.pictureBox1.Image = null;
- this.textBox1.Text = string.Empty;
- }
-
- /// <summary>
- /// Lorsqu'un nouvel objet est chargé dans le propertygrid, on en affiche le type
- /// au bas de la form.
- /// </summary>
- private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e) {
- this.toolStripStatusLabel1.Text = "L'objet en cours de visualisation est de type : " + this.propertyGrid1.SelectedObject.GetType().ToString();
- }
-
- /// <summary>
- /// Constructeur du formulaire.
- /// </summary>
- public Form1() {
- InitializeComponent();
- }
-
- /// <summary>
- /// Survient lorsque l'utilisateur souhaite consulter le contenu du presse-papier.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void button1_Click(object sender, EventArgs e)
- {
- ListFormats(Clipboard.GetDataObject());
- GetAllData(Clipboard.GetDataObject());
- }
-
- /// <summary>
- /// Permet de lister les formats disponibles dans l'objet Data.
- /// </summary>
- /// <param name="data"></param>
- private void ListFormats(IDataObject data)
- {
- ResetUI();
- this.listBox1.Items.Clear();
- string[] formats = data.GetFormats();
-
- foreach (string s in formats)
- {
- this.listBox1.Items.Add(s);
- }
- }
-
- /// <summary>
- /// Permet de récupérer toutes les données stockées dans l'objet Data.
- /// </summary>
- /// <param name="data"></param>
- private void GetAllData(IDataObject data)
- {
- ResetUI();
- Data = new Hashtable();
- foreach (string key in this.listBox1.Items)
- {
- Data.Add(key, data.GetData(key));
- }
- }
- }
- }
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace DragDropIn {
public partial class Form1 : Form {
/// <summary>
/// Variable permettant de stocker les données envoyées à notre programme par drag and drop.
/// </summary>
private Hashtable Data;
/// <summary>
/// Cet évènement survient lorsque la souris arrive sur notre formulaire lors d'une
/// opération de drag and drop.
/// On demande alors à l'évènement e (DragEventArgs) quels sont les types de données
/// que l'on peut récupérer, et on les liste dans le listview de la form.
/// </summary>
private void Form1_DragEnter(object sender, DragEventArgs e) {
ListFormats(e.Data);
e.Effect = DragDropEffects.All;
}
/// <summary>
/// Cet évènement survient à la fin de l'opération de drag and drop, lorsque la souris est "relachée"
/// sur notre formulaire.
/// On récupère alors tous les type des données que l'on a stocké dans notre list view,
/// on demande à l'objet e (DragEventArgs) tous les objets possibles, et on
/// les stocke dans un hash table.
/// </summary>
private void Form1_DragDrop(object sender, DragEventArgs e) {
GetAllData(e.Data);
}
/// <summary>
/// Lorsque l'on clique sur un élément de la liste des types envoyés par le drag and drop,
/// on affiche l'objet correspondant.
/// L'objet est affiché dans un propertygrid, et quand c'est possible dans une zone
/// de texte ou dans un zone d'image.
/// </summary>
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
ResetUI();
try {
this.propertyGrid1.SelectedObject = Data[this.listBox1.SelectedItem.ToString()];
if(this.propertyGrid1.SelectedObject.GetType() == typeof(Bitmap)) {
this.pictureBox1.Image = (Bitmap) this.propertyGrid1.SelectedObject;
}
if(this.propertyGrid1.SelectedObject.GetType() == typeof(string)) {
this.textBox1.Text = (string) this.propertyGrid1.SelectedObject;
}
if(this.propertyGrid1.SelectedObject.GetType() == typeof(System.IO.MemoryStream)) {
System.IO.StreamReader reader = new System.IO.StreamReader((System.IO.MemoryStream) this.propertyGrid1.SelectedObject);
this.textBox1.Text = (string) reader.ReadToEnd();
}
if(this.propertyGrid1.SelectedObject.GetType() == typeof(XmlDocument)) {
this.textBox1.Text = ((XmlDocument) this.propertyGrid1.SelectedObject).InnerXml;
}
} catch { }
}
/// <summary>
/// Méthode permettant de réinitialiser la zone de visualisation d'image et de texte.
/// </summary>
private void ResetUI() {
this.pictureBox1.Image = null;
this.textBox1.Text = string.Empty;
}
/// <summary>
/// Lorsqu'un nouvel objet est chargé dans le propertygrid, on en affiche le type
/// au bas de la form.
/// </summary>
private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e) {
this.toolStripStatusLabel1.Text = "L'objet en cours de visualisation est de type : " + this.propertyGrid1.SelectedObject.GetType().ToString();
}
/// <summary>
/// Constructeur du formulaire.
/// </summary>
public Form1() {
InitializeComponent();
}
/// <summary>
/// Survient lorsque l'utilisateur souhaite consulter le contenu du presse-papier.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
ListFormats(Clipboard.GetDataObject());
GetAllData(Clipboard.GetDataObject());
}
/// <summary>
/// Permet de lister les formats disponibles dans l'objet Data.
/// </summary>
/// <param name="data"></param>
private void ListFormats(IDataObject data)
{
ResetUI();
this.listBox1.Items.Clear();
string[] formats = data.GetFormats();
foreach (string s in formats)
{
this.listBox1.Items.Add(s);
}
}
/// <summary>
/// Permet de récupérer toutes les données stockées dans l'objet Data.
/// </summary>
/// <param name="data"></param>
private void GetAllData(IDataObject data)
{
ResetUI();
Data = new Hashtable();
foreach (string key in this.listBox1.Items)
{
Data.Add(key, data.GetData(key));
}
}
}
}
Conclusion
- Je posterais certainement une source sur le drag and drop sortant et l'implémentation de l'interface IDataObject. - Cette source est en .net 2
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Drag and Drop [ par jeanlou ]
Bonsoir à tous,Est-ce quelqu'un aurait des infos et des codes sources d'exemple de drag and drop svp?C super important et assez pressant ...Merci d'av
Drag and Drop [ par rintchu ]
Salut,je cherche un exemple qui me permettrait de faire du drag and drop entre deux treeview. QQN aurait il un morceau de code qui pourrait m'aider ?M
Drag Drop de fichiers [ par Popolino69 ]
Comment fat-on pour gerer le Drag Drop de fichier depuis l'explorateur windows vers mon application.Et aussi depuis mon application vers l'explorateur
Faire un drag and drop depuis et vers un datagrid [ par OlivierAfpaRoubaix ]
Bonjour a tous,Je voudrais faire un drag and drop d'un element d'une datagrid vers un textbox ou un autre datagrid (meme WindowsForm ou pas).Est-ce-qu
Drag and Drop sur les datagrid [ par OlivierAfpaRoubaix ]
J'aimerais faire un drag and drop d'une cellule de datagrid vers un TextBox. Comment faire ?
probleme de drag (and drop) [ par MorpionMx ]
Bonjour à tous, Voila, je suis en train de m'amuser à developper un jeu de cartes.Les cartes heritent de la classe UserControl.J'aimerais pouvoir les
Drag and drop d'un treeview sur lui meme !!! [ par nicola2s ]
J'ai créé un treeview qui liste les fichiers de mes dossiers.Et je voudrais pouvoir déplacer un fichier d'un dossier vers un autre(dans mon treeview)
Drag & Drop vers un DataGrid... [ par Zekez ]
Salut, voilà mon prob: J'aimerais réaliser un Drag & Drop d'une TextBox vers un DataGrid mais j'ai un soucis du coté de mon DataGrid... J'aimerais pou
Déplacement d'une image en drag & drop [ par oberown ]
Comment faire un drag & drop d'une image.Donc on laisse la souris appuyer et on peut déplacer l'image dans l'application.J'ai fait ceci pour l'instant
Icône du Drag and Drop [ par JuS ]
Juste une petite question.Je cherche à modifier l'icône qui est affichée quand on fait un Drag and Drop. Je sais qu'en VB c'était possible alors je me
|
Derniers Blogs
MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril SHAREPOINT 15 TECHNICAL PREVIEW MANAGED OBJECT MODEL SOFTWARE DEVELOPMENT KITSHAREPOINT 15 TECHNICAL PREVIEW MANAGED OBJECT MODEL SOFTWARE DEVELOPMENT KIT par Matthew
http://www.microsoft.com/download/en/details.aspx?id=28768&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+MicrosoftDownloadCenter+(Microsoft+Download+Center) ...
Cliquez pour lire la suite de l'article par Matthew
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|