salut
je cherche à implanter un code permettant d'afficher une icône sur un picturebox en cliquant sur un bouton et d'appliquer ensuite les fonctionnalitées de drag n drop sur cette icone ,le problème c que à chaque foi que je clique sur le bouton il maffiche le meme icone(un seul) et non pas une à chque clic.
bonjour
grace à ce code j'ai réussi à afficher l'icone suite à chaque clic, il me reste d'affecter les evenements du drag and drop pour l'icone affichée
merci
[int Num_PicBxs = 1;
private void button1_Click(object sender, EventArgs e)
{
PictureBox p = new PictureBox();
p.Location = new Point((Num_PicBxs*50)+20,+20);
p.Size = new Size(50, 50);
p.Image = Image.FromFile("d:\\laptop.ico");
panel1.Controls.Add(p);
Num_PicBxs++;
p.Show();
}]
Veux-tu reelement utiliser un Drag-Drop, ou un déplacement ?
un Drag-Drop c'est quand on veut passer un control d'un control à un autre,
si c'est dans le même panel que tu veux déplacer ton icone il suffit de récuperer les évenements MouseXXXX et de déplacer la PictureBox;
ex:
bonjour
oui c vrai en fait il s'agit du deplacement,merci commem pour votre reponse mais mon probleme reside le plus dans la manière de récuperer le nom du picturebox à laquelle je veux appliquer les evenements puisque la creation comme le montre mon code se fait au temps de l'exécution.
avez vous une idée?!
merci
D'abord lors de la création des picture boc, tu ajoute un handle pour les evenements MouseXXX,
tu ajoute le même pour toutes les PictureBox:
p.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseUp);
p.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
p.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDown);
ensuite tu renommes les méthodes de l'exemple précedent, et tu modifies la methode pictureBox_MouseMove pour recuperer la pictureBox ayant émis l'évenement.
Puis sur le control cible, celui qui va recevoir le drop, ajoute les hanlder d'evenments pour DragEnter et DragDrop, pense à autoriser le DragDrop (AllowDrop = ture)
dans les hanlder d'evenements tu pourra récuperer la picture Box:
ex:
if (p!=
null)
{
Point clientPoint = panel2.PointToClient(
new Point(e.X, e.Y));
PictureBox clone =
new PictureBox();
clone.Size = p.Size;
clone.Image = p.Image;
clone.Location =
new Point(clientPoint.X-clone.Width/2,clientPoint.Y-clone.Height/2);
panel2.Controls.Add(clone);
clone.Show();
}
}
Dans l'exemple je fais une copie, on peut aussi utiliser le pointeur du control d'origine pour eviter la copie,
pour un déplacement il faudra enlever la picture box d'origine, cela se fait au retour de l'appel a DoDragDrop(...).
merci vrmt pour votre aide et votre patience sauf que lors du test du 1er code concernant le deplacement il s'avère que dès que je déplace mon picturebox cette dernière se disparaisse!!!!
c du à quoi ca?
merci
en fait j'ai affiché les coordonnées(currentX,currentY) en deplacant mon picturebox,en faisant des translations,ses coordonnées ne correspondent pas à ce que doivent etre.
concernant le debugger,j'ai pas bien saisi comment ca se fait.
merci