DRAG DROP ENTRANT ET CLIPBOARD : MÊME COMBAT !

Signaler
Messages postés
3
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
12 décembre 2006
-
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40575-drag-drop-entrant-et-clipboard-meme-combat

Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
6
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+
Messages postés
24
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2008

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.
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
6
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+
Messages postés
24
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
15 octobre 2008

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
Afficher les 10 commentaires