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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|