olivierBob
Messages postés8Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention 4 juillet 2005
-
9 mai 2005 à 12:13
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 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)
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...
olivierBob
Messages postés8Date d'inscriptionvendredi 16 janvier 2004StatutMembreDerniè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
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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....
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
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...)
olivierBob
Messages postés8Date d'inscriptionvendredi 16 janvier 2004StatutMembreDerniè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?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...
olivierBob
Messages postés8Date d'inscriptionvendredi 16 janvier 2004StatutMembreDerniè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
olivierBob
Messages postés8Date d'inscriptionvendredi 16 janvier 2004StatutMembreDerniè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