IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VS2005][C#] Faire un "glisser/deposer" d'éléments


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut [VS2005][C#] Faire un "glisser/deposer" d'éléments
    Bonjour.

    Je veux construire un formulaire sur lequel j'ai une sorte de menu contenant des éléments que je peux placer sur le formuler en faisant un glisser/deposer.

    Dans un premier temps, je ne cherche rien de compliquer : je veux juste pouvoir lorsque je selectionne par exemple une image dans le menu voir un élément image (le même que celui selectionner) sur mon formulaire.

    En bref, c'est un peu comme lorsqu'on on prend un composant de la boite d'outils...

    Je veux faire une sorte de boite d'outils et pouvoir m'y servir en plaçant (idéalement par glisser/deposer) des outils sur mon formulaire.

    Est ce possible ?

    Avez vous une piste ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 274
    Points : 1 280
    Points
    1 280
    Par défaut
    un lien qui peut t'aider :

    http://plasserre.developpez.com/v4-15.htm
    j'suis vert !

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    je crois que tu peux faire un glisser deposer comme ça en gros:

    LB est un label

    sur le mousedown LB.doDragDrop

    dans le dragenter tu met la propriété allowdrop = true du panel sur lequel tu accepte le "déposer".

    tu execute ton code dans le dragleave

    mais ce ne sont que des souvenirs.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Merci pour vos réponses.

    doDragDrop est bien la méthode qu'il me fallait.

    Par contre, contrairement aux exemples que vous m'avez donné, ce qui m'intéresse, ce n'est pas de glisser du texte mais de glisser carrement un control.

    Par exemple, j'aimerai glisser un control Label vers un Panel (et pas seulement le texte contenu dans ce label).

    Voici mon code qui n'a aucun effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     private void lb_MouseDown(object sender, MouseEventArgs e)
     {
           lb.DoDragDrop(lb, DragDropEffects.Copy | DragDropEffects.Move);
      }
     
     private void panel1_DragDrop(object sender, DragEventArgs e)
     {
           panel1.Controls.Add((Control)e.Data);
     }
     
     private void panel1_DragEnter(object sender, DragEventArgs e)
     {
           e.Effect = DragDropEffects.Copy;
      }
    Avez vous une idée ?

  5. #5
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    assures toi que panal1.AllowDrop est à true.

    puis procède ainsi pour récupérer ton Label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          panel1.Controls.Add((Label)e.Data.GetData( typeof(Label) ));
    ca doit marcher

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Merci del-dongo pour ton aide.

    En fait, j'ai réussi à avancer :

    J'ai pris une picturebox et je veux la COPIER dans un panel en la glissant.

    J'arrive à mettre la picturebox sur le panel sauf qu'elle disparait du formulaire, en bref, je ne fait pas de COPY mais un MOVE!!

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     private void panel1_DragDrop(object sender, DragEventArgs e)
     {
        ((Panel)sender).Controls.Add((Control)((PictureBox)e.Data.GetData   ("System.Windows.Forms.PictureBox")));
     }
     
     private void panel1_DragEnter(object sender, DragEventArgs e)
      {
         if (e.Data.GetDataPresent("System.Windows.Forms.PictureBox"))
             e.Effect = DragDropEffects.Copy;
      }
     
      private void pictureBox1_MouseDown(object sender,    System.Windows.Forms.MouseEventArgs e)
    {
         pictureBox1.DoDragDrop(pictureBox1, DragDropEffects.Copy);
     }
    Le DragDropEffects.Copy est considéré comme un DragDropEffects.Move! ça serait un bug de VS2005 ?!!


  7. #7
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    comment ca elle disparait...?
    assures toi que tu lui attribues bien une location correcte (peut être la position de la souris )

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Je pense que je me suis mal exprimé!

    J'ai un formulaire contenant une picturebox et un panel (la picturebox est située hors du panel).

    Mon but c'est de faire une COPIE de la picturebox du formulaire vers le panel. Donc au final je devrais avoir 2 picturebox : ma picturebox dans sa place d'origine sur le sur le formulaire et sa copie sur le panel.

    Le souci est qu'avec mon Copy je DEPLACE la picturebox sur le panel (comme si j'avais fait Move)!!

    C'est pas normal comme comportement! N'est ce pas ?

  9. #9
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    effectivement...
    en fait copy n'est qu'un effet, il n'a y a pas de copie de l'objet qui est réalisé, ce qui est logique en soi...il te faut faire une copie de ton picturebox et la passer en paramètre de dodragdrop...sinon tu manipuleras tjs une référence vers ta picturebox d'origine.....

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Merci pour ces précisions.

    Mon but c'est justement d'avoir un composant sur le formulaire et d'en récuperer des "instances" sur mon panel. C'est exactement le même principe que la boite à outils de Visual Studio!

    Comment feras tu pour copier la picturebox et utiliser la copie tout en gradant l'originale à sa place ?

    Sinon, je viens de découvrir le composant toolStrip. ça pourra servir dans ce cas ? : :

  11. #11
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    peut-etre simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim pic as new picturebox
    pic.image = picoriginal.image

  12. #12
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Oui tout à fait!

    Par contre, si j'essaye de faire un 2° drag&drop sur ma picturebox, je n'y parviens pas... En plus l'unique élément placé sur le panel est figé...

    en fait, mon but c'est vraiment un truc du style de la boite à outils :

    1/ faire autant de fois que je veux des drag&drop sur mon composant

    2/ le placer comme je veux sur le panel au moment du drag&drop et plus tard!

    Avez vous une idée ? :

  13. #13
    Membre émérite
    Avatar de lakitrid
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 535
    Points : 2 388
    Points
    2 388
    Par défaut
    Tu peux alimenter les événements des contrôles que tu créé pour gérer les déplacement sur le panel (mousedown, mousemove, ...)
    Pour le drag and drop initial utilise la methode Clone pour dupliquer l'objet qui subit l'action.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 50
    Points : 33
    Points
    33
    Par défaut
    Merci pour ton aide.

    Par contre, Clone() n'existe pas pour PictureBox.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo