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

C# Discussion :

[C#] Drag & Drop PictureBox


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut [C#] Drag & Drop PictureBox
    Bonjour,

    En fouillant sur le forum et les tuto j'ai trouvé quelque trucs (en VB) sur le drag and drop, mais pas vraiment ce que je cherche... pourtant ça parait tout simple !

    J'aimerai faire des glissés / déposés d'images, en 2 temps.
    1) faire un clic sur une image et pouvoir la déplacer avec la souris, mettons que si je lache le bouton elle reste sur son nouvel emplacement.
    2) Quand je place mon image1 sur une image2 et que je lache le bouton, alors mon image1 remplace l'image2.

    Voila, pour le moment je cherche du coté des handlers suivant :
    MouseDown
    DragOver
    DragDrop

    Merci

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    Le code suivant devrait te satisfaire :

    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
    31
    32
    33
     
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                pictureBox1.DoDragDrop(pictureBox1.Image, DragDropEffects.All);  
        }
     
        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox2.AllowDrop = true;
        }
     
        private void pictureBox2_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Bitmap))
                e.Effect = DragDropEffects.Copy;
            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));
        }
    }
    Cela part du principe que tu as déclaré 2 picturebox se nommant pictureBox1 et pictureBox2. La 1ere est la source, l'autre la destination.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Citation Envoyé par Paul Musso Voir le message
    Bonjour,

    Le code suivant devrait te satisfaire :

    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
    31
    32
    33
     
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                pictureBox1.DoDragDrop(pictureBox1.Image, DragDropEffects.All);  
        }
     
        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox2.AllowDrop = true;
        }
     
        private void pictureBox2_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Bitmap))
                e.Effect = DragDropEffects.Copy;
            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));
        }
    }
    Cela part du principe que tu as déclaré 2 picturebox se nommant pictureBox1 et pictureBox2. La 1ere est la source, l'autre la destination.
    Merci, je vais pouvoir testé ton bout de code ce soir.
    Par contre j'ai déjà un doute quand tu parles du principe... en fait je développe un jeu, et le principe justement c'est que :
    pictureBox1 peut être source et pictureBox2 la destination
    ou
    pictureBox2 peut être source et pictureBox1 la destination

    Si c'est vraiment pas possible, j'envisage une alternative, si une pictureBox quelconque entre en contacte avec une autre, je déplace l'autre (vers les pions capturé par exemple)

  4. #4
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    A priori, je ne vois pas l'inconvénient que les 2 soient sources et cibles de drag n drop. Il suffit de rajouter les évènement MouseMove et DragEnter sur les 2 en n'oubliant pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pictureBox2.AllowDrop = true;
    pictureBox1.AllowDrop = true;

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Citation Envoyé par Paul Musso Voir le message
    A priori, je ne vois pas l'inconvénient que les 2 soient sources et cibles de drag n drop. Il suffit de rajouter les évènement MouseMove et DragEnter sur les 2 en n'oubliant pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pictureBox2.AllowDrop = true;
    pictureBox1.AllowDrop = true;
    AllowDrop, c'est une propriété cachée ? Je ne la vois pas avec l'intellisense !
    Merci en tout cas pour la confirmation, si ça passe dans les 2 sens ça m'arrange

  6. #6
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Exact, elle est cachée ...

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Citation Envoyé par Paul Musso Voir le message
    Exact, elle est cachée ...
    sur la MSDN je vois :
    PictureBox..::.AllowDrop, propriété

    Mise à jour : novembre 2007

    Cette API prend en charge l'infrastructure .NET Framework et n'est pas destinée à être utilisée directement à partir de votre code.
    Il me semble que Clone() est une méthode caché, c'est un peu le même principe alors ?
    Par contre je ne comprend pas pourquoi avoir fait ça sur AllowDrop ?!

    édit: Ha oui, c'est marrant, le compilateur build bien. C'est quand même rare d'utiliser des propriétés qui n'apparaissent pas dans l'intellisense !!!

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Je reviens sur ce topic...

    Je n'arrive toujours pas à faire un drag n drop ! Quand je clique sur mon image 1, et que je déplace la souris, j'ai un panneau (rond noir barré) qui apparait, et l'image ne bouge pas ?!

Discussions similaires

  1. Picturebox et Drag'n drop
    Par bananeflambee dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/03/2011, 02h15
  2. Drag and drop sur une PictureBox
    Par abdiouldbody dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/06/2009, 15h55
  3. Drag and drop d'un picturebox vers un autre
    Par karasnake dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/06/2009, 13h49
  4. [VB][drag and drop] 2 fenêtres, 2 picturebox
    Par Bomba dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 22/01/2006, 00h59

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