Drag and drop d'objet [Résolu]

olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 9 mai 2005 à 12:13 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 13 mai 2005 à 07:45
Bonjour a tous,
j'aimerais realiser un D&D d'objets a partir d'une liste vers un RichTextBox.
je m'explique :
j'ai un treeview comportant differents treenode. ces treenode correspondent à des objets instanciés (le treenode n'affiche que leur attribut Nom).
d'un autre coté j'ai une richTextBox contenant une liste de noms d'objets
j'aimerais faire un D&D entre ces deux composants en transmettant l'objet lui-meme (et pas son nom car ca ne me suffit pas pour le retrouver ensuite)

deplus, j'aimerais que, lors du deplacement, le nom de l'objet en cours de déplacement s'affiche à cote du curseur (à la place de l'icone de déplacement)

merci pour vos reponses
Afficher la suite 

15 réponses

Répondre au sujet
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 11 mai 2005 à 12:15
+3
Utile
Ben tu dois sans trop de problème connaître la position de la souris pendant le drag. Il faut savoir à ce moment sur quel control tu te trouves, puis une fois que tu as le control tu crées un Graphics ( Graphics g = myControl.CreateGraphics() ), puis tu fais un DrawString avec ce Graphics.

Ou ça devient compliqué, c'est si tu te trouves à cheval entre plusieurs Control, il faut dessiner des bouts sur chacun d'eux.
C'est peut-être pas la meilleure solution, mais à priori j'en vois pas d'autre...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 10 mai 2005 à 08:58
0
Utile
Salut,
Peut-être que ceci te sera utile : http://www.c-sharpcorner.com/winforms/DragDropInCSharp.asp

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 10 mai 2005 à 12:27
0
Utile
Merci Bidou mais j'ai dejà vu ce source...
mon pb reside dans le fait de faire un drag&drop avec un objet perso en parametre.
avec
string[] st = e.Data.GetFormats();
je recupere bien mon type d'objet dans st[0]
ensuite, si je fais
Boolean f =e.Data.GetDataPresent(st[0]);
f est à true
mais, en supposant que st[0] contienne "maClasse",
maClasse o = (maClasse)e.Data.GetData(st[0]);
me renvoie null dans o
Commenter la réponse de olivierBob
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 10 mai 2005 à 16:56
0
Utile
C'est pas très compliqué, j'avais du le faire il y a quelque temps dans un project.
Malheureusement, je n'ai pas le source ici. Je regarderai ce soir, et puis demain je t'enverrai un morceau de code si j'y pense. Passe faire un tour sur ce poste demain dans la soirée....

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 11 mai 2005 à 07:58
0
Utile
Bon voici comme j'avais procédé :

Methode DragDrop
SendObject so = (SendObject)(e.Data.GetData(typeof(SendObject)));


Methode MouseMove
SendObject send = new SendObject();
// Set certaine properties à send (send.XXX = yyyy)
DoDragDrop(send, DragDropEffects.All | DragDropEffects.Link);

Note
SendObject est un object que je créee, je peux de cette façon y passer n'importe quoi.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 11 mai 2005 à 09:37
0
Utile
c'est bien comme ca que j'essaie de faire mais ca ne fonctionne pas : j'ai toujours null dans o (l'equivalent de send)

dans le dragdrop :

membre o = (membre)e.Data.GetData(typeof(membre));

dans le ItemDrag de mon TreeView


if (monObjCourant !=
null) // recupéré du treenode selectionné


DoDragDrop(monObjCourant,
DragDropEffects.All |
DragDropEffects.Link);

pour info monObjCourant est de type membre

j'y pige rien... avec des string tout marche nickel mais des que je passe aux objets ca fonctionne plus.
est-ce que la classe 'membre', ou 'SendObject' pour toi, doit heriter d'un type d'objet "dropable" ou equivalent?
en tous cas merci pour ton aide
Commenter la réponse de olivierBob
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 11 mai 2005 à 10:01
0
Utile
Non il ne doit pas hériter d'un type particulier.
Essayes de poster plus de code, comme ça je n'arrive pas à te donner plus d'indication...
(ou peut-être essayes de passer une structure et pas un object, juste pour voir...)

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 11 mai 2005 à 10:36
0
Utile
je veux bien te passer plus de code mais ca ne t'avancera pas a grand chose... et en plus ca fait plusieurs milliers de lignes...
j'ai resolu mon pb en suivant ton conseil : je passe une string me permettant ensuite de retouver mon objet via des fonctions ca fonctionne bien mais c'est pas 'propre'.

sinon, tu as une idee pour afficher du texte d'information a cote du curseur souris pendant le drag?

merci encore
Commenter la réponse de olivierBob
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 11 mai 2005 à 14:29
0
Utile
merci bcp :-) je vais voir avec ca!
Commenter la réponse de olivierBob
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 11 mai 2005 à 17:00
0
Utile
Il me vient encore une autre idée à l'esprit :
Pourquoi ne pas créer un Panel (dynamiquement) quand tu commences le drag, et setter sa property BackgroundColor à Transparent. Ca te permet d'avoir un Panel qui bouge autour de ton Cursor (mais pas visible pour l'utilisateur) et ca va te permettre de dessiner ton string dessus (avec DrawString), sans te poser de questions (du genre, est-ce que je suis à cheval entre deux Control?).
Je n'ai jamais fait ça, je ne sais pas ce que ça vaut...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 12 mai 2005 à 09:34
0
Utile
bonne idee
Commenter la réponse de olivierBob
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 12 mai 2005 à 10:32
0
Utile
pourrais-tu me donner plus de details pour le panel
j'ai fait ca et je vois rien


panelInfoDrag.Name =
"panelInfoDrag";
panelInfoDrag.Size =
new System.Drawing.
Size(150, 50);
panelInfoDrag.Left = position.X; // position curseur souris x
panelInfoDrag.Top = position.Y; // position curseur souris y

//panelInfoDrag.BackColor = TransparencyKey;
panelInfoDrag.BorderStyle =
BorderStyle.None;

Label labInfo =
new
Label();
labInfo.Text = monObjCourant.Nom;
panelInfoDrag.Controls.Add(labInfo);
panelInfoDrag.show();
Commenter la réponse de olivierBob
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 12 mai 2005 à 10:40
0
Utile
Il faut encore ajouter le Panel au form...
myForm.Controls.Add(myPanel);

Dis moi si ça fonctionne pour finir, c'est toujours intéressant à savoir.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Commenter la réponse de cs_Bidou
olivierBob 9 Messages postés vendredi 16 janvier 2004Date d'inscription 4 juillet 2005 Dernière intervention - 12 mai 2005 à 18:02
0
Utile
oups ;-)
j'ai aussi ajoute ca : panelInfoDrag.BringToFront();
sinon je le voyais pas.
par contre, pour le deplacement, je le defini sur le DragOver...
mais il faut le definir sur tous les controles du Form (sinon le deplacement s'arrete sur tout element qu'il rencontre) : c'est lourd et pas fait pour.
je vais essayer ton DrawString avec l'icone du drag... a suivre

merci en tous cas :-)
Commenter la réponse de olivierBob
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 13 mai 2005 à 07:45
Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.