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
QUELQUES TRUCS INTéRESSANTS (05/09/2010)QUELQUES TRUCS INTéRESSANTS (05/09/2010) par coq
Cette fois-ci : .NET Debug / Performance Sécurité SQL Server .NET Determining if a type is defined in the .NET Framework (blog de Scott Dorman) Ha tiens, je n'avais jamais vraiment pensé à utiliser le jeton de clé publique...
Cliquez pour lire la suite de l'article par coq ENUMERABLECOLLECTIONENUMERABLECOLLECTION par Matthieu MEZIL
Prenons le scénario suivant. On utilise MVVM. On a les deux classes suivantes dans le model : public class Child { } public class Parent { private ObservableCollection < Child > _children; public ObservableCollection < Child > Children { get {...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [HS] CHROME 6 + MOI = COUP DE GUEULE ![HS] CHROME 6 + MOI = COUP DE GUEULE ! par JeremyJeanson
Attention, le poste qui suit n'est pas la complainte d'une personne : Qui n'aime pas Chrome. D'un anti Google. D'un développeur qui a un poil énorme dans la main. Ceux qui me fréquentent savent que je change de navigateur favori tous les 2 ou 3 mois afin ...
Cliquez pour lire la suite de l'article par JeremyJeanson [WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas
Logiciels
WebLogAndPass (1.0.0)WEBLOGANDPASS (1.0.0)WebLogAndPass est un logiciel permettant de mémoriser vos sites préférés et pour chacun d'entre-e... Cliquez pour télécharger WebLogAndPass uTorrent (2.0.4)UTORRENT (2.0.4)C'est un client BitTorrent très puissant et très performant. Comme son nom l'indique, uTorrent (m... Cliquez pour télécharger uTorrent Bureau de Gestion - ERP Devis Facturation (2.02)BUREAU DE GESTION - ERP DEVIS FACTURATION (2.02)- Version gratuite du 10/06/2010
Le Bureau de Gestion est un logiciel dédié à la gestion de l'en... Cliquez pour télécharger Bureau de Gestion - ERP Devis Facturation 4Videosoft Transfert iPod Mac (3.2.08)4VIDEOSOFT TRANSFERT IPOD MAC (3.2.08)4Videosoft Transfert iPod-Mac caractérise principalement à transférer les fichiers iPod vers Mac.... Cliquez pour télécharger 4Videosoft Transfert iPod Mac 4Videosoft HD Convertisseur (3.3.08)4VIDEOSOFT HD CONVERTISSEUR (3.3.08)Etant le meilleur HD Vidéo Convertisseur, 4Videosoft HD Convertisseur, vous pouvez regarder la vi... Cliquez pour télécharger 4Videosoft HD Convertisseur
|