begin process at 2010 02 10 05:59:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > DRAG DROP ENTRANT ET CLIPBOARD : MÊME COMBAT !

DRAG DROP ENTRANT ET CLIPBOARD : MÊME COMBAT !


 Information sur la source

Note :
Aucune note
Catégorie :Système Source .NET ( DotNet ) Classé sous :idataobject, drag, drop, clipboard, getformats Niveau :Initié Date de création :04/12/2006 Vu / téléchargé :14 470 / 466

Auteur : yoannd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • DragDropIn.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier923 octets
  • DragDropIn.suoTélécharger ce fichier [Réservé aux membres club]17 920 octets
  •   DragDropIn
    • DragDropIn.csprojTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 227 octets
    • Form1.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 747 octets
    • Form1.Designer.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier9 556 octets
    • Form1.resxTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 014 octets
    • Program.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier398 octets
    •   obj
      • DragDropIn.csproj.FileList.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier594 octets
      •   Debug
        • DragDropIn.csproj.GenerateResource.CacheTélécharger ce fichier [Réservé aux membres club]842 octets
        • DragDropIn.exeTélécharger ce fichier [Réservé aux membres club]24 576 octets
        • DragDropIn.Form1.resourcesTélécharger ce fichier [Réservé aux membres club]180 octets
        • DragDropIn.pdbTélécharger ce fichier [Réservé aux membres club]32 256 octets
        • DragDropIn.Properties.Resources.resourcesTélécharger ce fichier [Réservé aux membres club]180 octets
      •   Release
        • DragDropIn.csproj.GenerateResource.CacheTélécharger ce fichier [Réservé aux membres club]842 octets
        • DragDropIn.exeTélécharger ce fichier [Réservé aux membres club]24 576 octets
        • DragDropIn.Form1.resourcesTélécharger ce fichier [Réservé aux membres club]180 octets
        • DragDropIn.pdbTélécharger ce fichier [Réservé aux membres club]22 016 octets
        • DragDropIn.Properties.Resources.resourcesTélécharger ce fichier [Réservé aux membres club]180 octets
    •   Properties
    •   bin
      •   Debug
        • DragDropIn.exeTélécharger ce fichier [Réservé aux membres club]24 576 octets
        • DragDropIn.pdbTélécharger ce fichier [Réservé aux membres club]32 256 octets
        • DragDropIn.vshost.exeTélécharger ce fichier [Réservé aux membres club]5 632 octets
      •   Release
        • DragDropIn.exeTélécharger ce fichier [Réservé aux membres club]24 576 octets
        • DragDropIn.pdbTélécharger ce fichier [Réservé aux membres club]22 016 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION ET ENVOI DE FICHIERS ZIPPÉS
Source avec Zip Source avec une capture Source .NET (Dotnet) LES RÉFÉRENCES FAIBLES
Source avec Zip Source .NET (Dotnet) EXTENSION DES LISTES GÉNÉRIQUES (DESIGN PATTERN "DECORATEUR"...
Source avec Zip Source avec une capture Source .NET (Dotnet) UN PEU DE 3D AVEC XAML ET BLENDER

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES LANGUES, COUNTRIES, CHAÎNES DE CARACTÈRE SIMPLE par gourky
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORER LA MFT D'UNE PARTITION NTFS par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) WRAPPER COMPLET SUR L'API DE BIOMÉTRIE DE WINDOWS 7 par Willi
Source avec Zip Source .NET (Dotnet) UTILISER L'ASSISTANT DE GRAVURE DE WINDOWS par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) EASYDESKXP par neo2k2

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) MAFTOOLS : TESTEUR D'EXPRESSIONS RÉGULIÈRES par sebmafate
Source avec Zip Source .NET (Dotnet) GESTIONNAIRE DE GLISSER DÉPOSER (DRAG-DROP) par Le_proprio_de_mykeyes
Source avec Zip Source .NET (Dotnet) DRAG AND DROP par gcorbineau
Source avec Zip Source avec une capture Source .NET (Dotnet) CLASSE TREEVIEW AVEC DRAG DROP DES NOEUDS ENTRE EUX par nseveno
Source .NET (Dotnet) DRAGDROP DE FICHIERS par sergebre

Commentaires et avis

Commentaire de ley0 le 12/12/2006 00:43:23

commentaire / suggestion

À première vue, ta source semble très bien structurée. J'ai vraiment hâte de l'essayer. Puisqu'il n'est pas possible pour moi de l'essayer présentement, je me demandais à quel point les objects drag&drop-és peuvent être complexes.

Par exemple, est-il possible de prendre et glisser un élément provenant du browser, soit, une list-box, dans la perspective de faire de cette simple source la fonction principale d'une classe qui fabriquerait rapidement des mashups, puisque les documents office(c), par exemple, gèrent très bien la conversion vbscript <=­> html, si je ne m'abuse.

Merci!

Commentaire de yoannd le 12/12/2006 00:54:10

Salut,

Il me semble que je n'ai pas bien compris le se sens de ta question.

Qu'entends-tu par "mashup" ?

Commentaire de ley0 le 12/12/2006 01:31:11

Excuses-moi. Je suis un commentateur emballé.

Un mashup est un "mixte" de plusieurs choses, et fait partie de notre époque. Par exemple, le scrapbooking est en quelque sorte du mashup. Certains vidéos sur iTune, les mixages de dj. Dans un contexte de programmation web, on peut appeler mashup le mélange de plusieurs sites. Par exemple, quelqu'un qui ferait un site (payant ou non) spécialisé en météorologie en réutilisant directement des informations provenant de divers sites (Weather, meteo-media, meteofrance) et en ferait soit un site web (ex: asp), soit un petit programme qui les réutiliserait pour des calculs statistiques.

Ainsi, je me demandais si cette source pouvait être utile pour ce genre de programmation. J'imaginais par exemple un programme qui permettrait de récupérer directement des formulaires et objets dans des sites pour les placer dans son propre programme, comme on effectuerait dans un environnement visuel.

Par ailleurs, et je viens de m'en souvenir, il existe déjà des sites qui propose la construction de site web - EN LIGNE - et qui imite le style IDE. Voilà pourquoi je me suis imaginé un programme plutôt "généraliste", qui saurait traiter n'importe quel objet. Ou voilà plutôt pourquoi je me demandais le niveau de complexité, sinon les types d'objets qui sont "bouffés" par le GetAllData(e.Data).

Commentaire de yoannd le 12/12/2006 01:49:01

OK, je vois à peu près ce que tu veux dire. Première chose pour être bien clair : nous sommes ici dans un contexte d'appli windows, et non web.

Malheureusement, il n'existe pas de méthode miracle pour traiter toutes les données envoyées depuis un drag and drop.

La raison de ceci est qu'un drag and drop peut t'envoyer des données texte, image, stream, tableaux de strings, tableaux d'entiers, collections, ... bref, toutes les classes qu'il est possible de trouver dans le framework, ainsi que toutes les classes qu'il est possible de développer. Une chose est sûre, c'est à l'application dont vient le drag and drop de fournir des informations compréhensibles par les autres programmes, et pas l'inverse.

En tous cas, vu la diversité de ce qui peut t'être envoyé, j'ai créé ce petit programme. Tu fais un glisser déposer de l'appli dont tu souhaites avoir la possibilité de recevoir des données. S'il s'agit d'Excel, très bien, fais un test avec Excel, récupère par exemple la donnée au format csv par exemple, et voila, tu as géré déjà un type de compatibilité avec une application tierce. Au passage, si une autre application t'envoie aussi du csv, tu seras aussi compatible, sans rien avoir eu à faire !

Bref, il est impossible de savoir ce que tu vas récupérer, mais tu peux toujours traiter les cas les plus courants (texte, html, xml, image, stream). Pour en venir à ta question de la complexité des objets envoyés par drag and drop, la réponse est donc simple : on t'envoie tout et n'importe quoi par ce biais, aussi bien tu texte simple si tu en veux, que tu xml, du bitmap, des instances de classes avec leurs sous-classes... Peut-on être générique dans ces cas là ? Oui si on ne veut récupérer que des données texte (c'est facile, pas cher, et ça peut rapporter gros), mais certainement pas pour des trucs plus chiadés type instances de classes, memystreams, documents xml...

Voila, j'espère avoir répondu à ta question. Si j'ai mas expliqué ou que je suis à côté de la plaque, n'hésite pas à me relancer.

ps : je publierais dans quelques temps un article sur le drag and drop sortant, ou comment envoyer des données à d'autres applications...

a+

Commentaire de tibo76530 le 21/08/2007 18:15:36

bonjour.
ton code est très intéressant.
j'ai une queston pour toi: j'ai moi aussi un code de drag and drop sur 2 list view, pour copier les éléments de l'une vers l'autre. mais je souhaiterai changer cela. en effet, je voudrai qu'en droppant les éléments de ma 1ere liste sur ceux de la 2eme, cela déclenche un évènement qui me permettent de les associer dans ma BDD.
merci de me répondre, ou de me demander des précisions
tibo

Commentaire de yoannd le 22/08/2007 09:17:31

Salut,

Je ne sais pas trop ce que tu veux faire, et effectivement, je veux bien des précisions.
Ceci-dit, la source présentée ici permet de gérer le drag&drop provenant d'applications tierces. Par exemple, que se passe-t-il quand on fait un drag en drop depuis excel ou word vers ton application. D'après ce que j'ai compris de ton message, il s'agirait plutôt d'un drag&drop interne. Les mêmes évènements sont les mêmes. Après, tu peux très bien effectuer des opérations (enregistrement en base par ex.) ou lever des évènements internes à ton application sur l'évènement gérant le drag "in" de teslist-box.
Pour pouvoir t'aider d'avantage, j'aurais besoin plus d'infos, avec pourquoi pas un peu de code.

Cordialement,

Yoann

Commentaire de tibo76530 le 22/08/2007 11:45:14

effectivement, j'ai relu, et c'est pas très clair ce que j'ai mis. c'est effectivement un drag and drop interne que je souhaite réaliser. j'explique:
j'ai 2 listview, remplies chacunes avec des éléments différents.
je souhaite que l'on puisse prendre un élément de la premiere liste, qu'on le fasse glisser sur la 2eme et quand on le lachera sur l'élément choisi, je coderai un enregistrement dans ma BDD. voila, j'espère que c'est plus clair.
dans tous les cas, merci de t'intéresser à mon problème.
tibo

Commentaire de yoannd le 22/08/2007 12:08:26

Je ne sais pas si ce que je vais te dire va t'aider, mais voici comment je vois le principe :
Tout d'abor, tu as une classe, qui hérite de l'interface IDataObject (je crois que c'est son nom). C'est une interface définie dans le framework .net. Comme c'est une interface, tu dois redéfinir dans ta classe les méthodes de l'interface.
Une fois que c'est fait, tu remplis ta liste normallement avec tes données, qui doivent correspondre à des instances de ta classe qui implémente IDataObject.

Maintenant, tu dois gérer deux évènements sur tes listview :
- Sur ta liste 1 : L'évènement DragOut. Autrement dit, ce qui se passe quand l'utilisateur prend un élément de cette liste pour l'emener ailleurs. Sur cette évènement, tu peux définir le DataObject qui sera "transporté" d'un composant à l'autre. Et le DataObject en question, c'est le (ou les) instances des classes qui se trouvent derrière chaque élément sélectionné du listview. Pour voir si ton évènement DragOut fonctionne, tu peux utiliser le code présent sur cette page. Il te suffit, si tout se passe bien, de lancer ton projet, et de faire un drag&drop de ta liste 1 vers mon appli, et tu verra si ton dataobject est bien passé.

- Secondo, il faut gérer le DragEnter sur ton second listview. Autrement dit, c'est l'évènement qui survient lorsque ton utilisateur est en train de faire un drag&drop, et que sa souris arrive sur ton listview de destination, mais attention, le bouton de la souris n'est pas encore relaché. C'est à ce moment là que tu peux accepter ou non l'objet qu'on te propose. Pour accepter ou non, tu regardes les paramètres passés à ton évènement... tu y trouveras un dataobject. Il te suffit de voir si le type de ce dataobject te convient. Ici, le type sera typeof(la classe dont on a parlé tout à l'heure).

- Enfin, le DragDrop. C'est quand l'utilisateur relache la souris sur ton second ListView. C'est à ce moment précis que tu récupères effectivement ton DataObject, et que tu en fais ce que tu veux. Typiquement, ici, tu vas devoir ajouter un nouvel élément à ton second listview, et mettre à jour ta base de données.

Autre chose que je te conseille : tu as deux listview, et tu veux peut-être pouvoir faire des drag&drop de l'une vers l'autre, et vice-versa. Ce que tu devrais donc faire, c'est un composant ergonomique qui dérive de listview, et qui implémente tout ce que je t'ais dit avant. De cette mannière, tu ne réécriras pas tes évènements de drag&drop 2 fois (1 fois par listview).

Bon, je ne sais pas si tout ce que j'ai écrit est exact car j'ai fait ça de mémoire. Je n'ai peut-être pas été non plus très clair dans mes explications.

Le mieux serait que tu je te fasse un tutoriel ce soir, si tu en as besoin.

a+

Commentaire de tibo76530 le 23/08/2007 17:24:48

merci pour ta réponse. mais ca ne réponds pas totalement à ce que je veux.
je vais essayer de mieux expliquer.
j'ai déjà implémenter les dragenter et drag drop.
j'ai ce code la:
this.listViewTarget.DragDrop += new System.Windows.Forms.DragEventHandler(this.listViewTarget_DragDrop);
this.listViewTarget.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewTarget_DragEnter);
seulement, je ne veux pas pouvoir deposer mon élément saisi dans ma 1ere list dans ma 2eme list, mais SUR un éléments de ma 2eme liste.
j'ai essayé de mettre mes 2 fonctions sur
this.listViewTarget.Items.DragDrop

mais ca ne marche pas.
j'espère que tu as compris ce que je voulais faire, et vois tu une solution?
merci de tes conseils.

Commentaire de yoannd le 23/08/2007 19:13:57

oui, je vois mieux ce que tu veux dire.
En gros, tu ne veux pas simplement déplacer un élément d'une liste à l'autre, mais prendre un élément de la liste 1 et "l'associer" à un élément de la liste 2.
Ta logique de vouloir mettre un évènement DragEnter sur un élément de la liste plutôt que sur la liste en elle-même est légitime, mais comme tu le vois, ce n'est à priori pas possible.
L'autre solution serait de récupérer l'emplacement de la souris au moment de cet évènement (cette info doit certainement se trouver dans les params de l'évènement DragEnter), et par ce biais, voir s'il n'y a pas une méthode pour savoir quel élément de la liste se trouve au niveau de ce point.
Essaye peut-être de chercher dans ce sens. Si tu le souhaites, je veux bien y regarder plus concrètement dimanche prochain ou la semaine prochaine. D'ici-là, je n'aurais malheureusement pas le temps de m'y attarder plus...
Bon coding !

a+

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales