Drag and drop d'objet

Résolu
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005 - 9 mai 2005 à 12:13
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 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

15 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 mai 2005 à 12:15
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
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 mai 2005 à 08:58
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
10 mai 2005 à 12:27
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 mai 2005 à 16:56
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 mai 2005 à 07:58
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
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
11 mai 2005 à 09:37
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 mai 2005 à 10:01
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
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
11 mai 2005 à 10:36
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
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
11 mai 2005 à 14:29
merci bcp :-) je vais voir avec ca!
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 mai 2005 à 17:00
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
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
12 mai 2005 à 09:34
bonne idee
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
12 mai 2005 à 10:32
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();
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 mai 2005 à 10:40
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
0
olivierBob Messages postés 8 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 4 juillet 2005
12 mai 2005 à 18:02
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 :-)
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 mai 2005 à 07:45
0
Rejoignez-nous