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 :

Problème de Drag & Drop entre PictureBox V2


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut Problème de Drag & Drop entre PictureBox V2
    Bonjour à tous,

    Je me suis mis récemment au C# et je me trouve déjà face à un problème. Comme le suggère mon titre, je souhaite faire du Drag & Drop entre deux PictureBox. Et c'est bien là qu'est le problème, le D&D ne veut pas s'effectuer.

    J'ai le code suivant :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     private void Table_Load(object sender, EventArgs e)
            {
                CarteHS1.AllowDrop = true;
                CarteHS2.AllowDrop = true;
            }
     
            private void CarteHS1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    CarteHS1.DoDragDrop(CarteHS1.Image, DragDropEffects.All);
                }
            }
     
            private void CarteHS2_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.Bitmap))
                    e.Effect = DragDropEffects.Move;
                else
                    e.Effect = DragDropEffects.None; 
            }
     
            private void CarteHS2_DragDrop(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(DataFormats.Bitmap)))
                    this.CarteHS1.Image = (Bitmap)(e.Data.GetData(DataFormats.Bitmap));
            }
    Je me suis dis qu'il devait y avoir une erreur, que j'avais mal lu mon bouquin, donc j'ai fait des recherches sur le forum et sur Internet et à chaque fois, je retombe sur le même code à la différence prêt qu'il fonctionne chez les autres.

    Je n'arrive pas à savoir ce que j'ai pu oublié ou mal faire.
    A savoir que quand je fais glisser l'image depuis la PictureBox CarteHS1 vers CarteHS2, le curseur change au-dessus de CarteHS2 pour m'indiquer que le D&D est autorisé mais l'image ne bouge pas pour autant, elle n'est même pas recopiée.

    Merci d'avance pour le coup de main.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ton code est parfaitement correct, à un petit détail près : dans CarteHS2_DragDrop, tu affectes l'image à CarteHS1 et non à CarteHS2

  3. #3
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par tomlev Voir le message
    ton code est parfaitement correct, à un petit détail près : dans CarteHS2_DragDrop, tu affectes l'image à CarteHS1 et non à CarteHS2
    Normal. Initialement, j'avais mis CarteHS2 mais dans certain code, j'avais vu qu'il était mis l'équivalent de mon CarteHS1 (le pictureBox1 de chaque code fournit sur le net).

    Je viens de repasser à CarteHS2 et... Ca ne fonctionne toujours pas !
    Le curseur change bien pour m'indiquer que le Drag & Drop est autorisé mais l'image n'est pas déplacée.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben je viens de tester avec exactement le même code, et chez moi ça marche...

  5. #5
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Tu as généré un exécutable ou tu te contentes de compiler / exécuter avec F5 ? Moi j'utilise la seconde solution.

    Il est possible que tu m'envoies ton projet pour que je regarde ce que ça donne chez moi ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Tuttu Voir le message
    Tu as généré un exécutable ou tu te contentes de compiler / exécuter avec F5 ? Moi j'utilise la seconde solution.
    Ca revient au même : quand tu fais F5, ça génère l'exe et ça l'exécute

    Citation Envoyé par Tuttu Voir le message
    Il est possible que tu m'envoies ton projet pour que je regarde ce que ça donne chez moi ?
    Je vais pas t'envoyer tout le projet parce qu'il y a plein de trucs dedans (c'est le projet où je fais tous mes tests...), mais voilà le code concerné :


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        public partial class TestDnD : Form
        {
            public TestDnD()
            {
                InitializeComponent();
                pictureBox2.AllowDrop = true;
            }
     
            private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    pictureBox1.DoDragDrop(pictureBox1.Image, DragDropEffects.All);
                }
            }
     
            private void pictureBox2_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.Bitmap))
                    e.Effect = DragDropEffects.Move;
                else
                    e.Effect = DragDropEffects.None;
            }
     
            private void pictureBox2_DragDrop(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(DataFormats.Bitmap)))
                    this.pictureBox2.Image = (Bitmap)(e.Data.GetData(DataFormats.Bitmap));
            }
        }
    Mais bon, vu que j'ai essentiellement copié/collé ton code, te ne devrais pas trouver beaucoup de différences...

  7. #7
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Bon, je sais pas ce que j'ai foutu mais j'ai carrément régressé ! :p
    Je n'ai même plus le changement de curseur qui s'opère. Bref, je vais refaire un nouveau projet (Heureusement, celui-ci n'était pas avancé) pour tester à nouveau ça.

    Juste une dernière question pour toi avant que je ne recommence : ton image, tu l'importes comment dans la PictureBox ? Une ressource locale ou un fichier de ressource du projet ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Tuttu Voir le message
    Juste une dernière question pour toi avant que je ne recommence : ton image, tu l'importes comment dans la PictureBox ? Une ressource locale ou un fichier de ressource du projet ?
    là c'est une ressource du projet, mais ça marche aussi bien avec une autre image...

  9. #9
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Je ne dois pas avoir de chance alors. Je suis reparti de zéro et c'est encore pire. Je n'ai plus de changement dans la forme de mon curseur pour m'indiquer que le D&D est autorisé.

    C'est reparti pour un tour et voir où j'ai loupé le virage... :p
    Merci de ton coup de main. Je passe en résolu pour le moment et si je ne m'en sors pas, je "réouvrirai" le sujet.

    EDIT : je viens de refaire un projet en collant ton code à l'intérieur et j'obtiens toujours le même résultat, à savoir une absence de résultat ! :p

    EDIT 2 : Ca marche enfin. J'ai tout repris depuis zéro, en y allant petit-à-petit et cette fois, ça fonctionne. Mon code est en tout point le même, mais cette fois ça marche. J'espère que ça va durer. ^^

  10. #10
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    AllowDrop=true sur tes contrôles?

  11. #11
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Il était présent à chaque fois. Au départ, comme je l'avais dit, le curseur changeait bien de forme mais l'image n'était pas déplacée. Maintenant, tout est fait.

  12. #12
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Nouveau problème. L'image présente dans la pictureBox1 ne disparait qu'après le second DnD effectué. C'est normal ?

    Plus concrètement, je fais un premier DnD est l'image apparaît bien dans la PictureBox2 mais reste visible dans la PictureBox1. Je refais un DnD et cette fois, l'image disparaît bien de la PictureBox1.


    J'ai une piste. Cela vient de la façon dont je cherche à effacer l'image de la PictureBox1.

    Pour savoir de quelle PB provient mon image, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    pictureBox1.DoDragDrop(pictureBox1.Image, DragDropEffects.All);
                    PBSource = pictureBox1;
                }
            }
    ou PBSource est déclarée plus haut comme suit :
    Ensuite, je supprime comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void pictureBox2_DragDrop(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(DataFormats.Bitmap)))
                {
                    this.pictureBox2.Image = (Bitmap)(e.Data.GetData(DataFormats.Bitmap));
                  PBSource.Image = null;
                }
     
            }
    Ce code marche bien mais uniquement après le deuxième DnD effectué. Etrange...

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben avec le code que je t'ai donné, il n'y a aucune raison que ça "vide" la pictureBox d'origine...
    Il suffit de mettre pictureBox1.Image à null

  14. #14
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il suffit de mettre pictureBox1.Image à null
    Oui, ça je l'ai testé et validé. Mais je peux avoir plusieurs PictureBox d'origine donc il faut que je sache laquelle je dois vider. D'où la mise en dans une variable du nom de la PictureBox d'origine. Et de cette façon, il me faut deux DnD pour que la PictureBox d'origine soit vidée. ^^

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En fait, c'est parce que l'instruction qui suit l'appel à DoDragDrop n'est exécutée qu'après que le drag/drop soit terminée. Donc lors du premier passage par pictureBox2_DragDrop, PBSource vaut encore null. Il faut initialiser PBSource avant l'appel à DoDragDrop

  16. #16
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Problème résolu, merci à toi encore une fois.

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

Discussions similaires

  1. [VBA-E]drag and drop entre deux listbox
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/06/2012, 14h37
  2. Drag and Drop entre 2 JTree
    Par Lebas dans le forum Composants
    Réponses: 1
    Dernier message: 07/02/2007, 11h59
  3. [Débutant(e)][VB.NET] Drag and drop entre 2 treeviews
    Par - Manuella Leray - dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/10/2005, 15h54
  4. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10
  5. Drag and Drop entre listbox
    Par zwoke dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/07/2004, 14h10

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