OVH Cloud OVH Cloud

Debutant C# Problème Drag&Drop

2 réponses
Avatar
Max
Bonjour,

Débutant dans la programmation en C#, je souhaiterai effectué un drag and
drop dans une appli.
Cela concernerai le drag d'un bouton et drop dans un panel.

Voici le code que j'ai réussi a faire, mais celui-ci ne marche pas.
Pouvez-vous m'aider à résoudre le problème ?
Merci d'avance,
Maxime

Code :

private void button2_MouseDown(object sender, MouseEventArgs e)
{

button2.DoDragDrop(button2, DragDropEffects.Copy | DragDropEffects.Move );

}

private void panel1_DragEnter(object sender, DragEventArgs e)

{

e.Effect = DragDropEffects.All;

}

private void panel1_DragDrop(object sender, DragEventArgs e)

{

MessageBox.Show(e.Data.GetType().ToString());

panel1.Controls.Add((Control) e.Data);

}

2 réponses

Avatar
Olivier
Bonjour,

Voici un exemple qui fonctionne.
Attention il faut changer la position bouton, ne pas oublier les
AllowDrop = true, bien rajouter les Form1_DragDrop et Form1_DragEnter
partout ou c'est nécessaire.

Olivier

public partial class Form1 : Form
{
private Point mDropOffset;
public Form1() {
InitializeComponent();
this.AllowDrop = true;
this.panel1.AllowDrop = true;
this.button2.MouseDown += button2_MouseDown;
this.panel1.DragDrop += Form1_DragDrop;
this.panel1.DragEnter += Form1_DragEnter;
this.DragDrop += Form1_DragDrop;
this.DragEnter += Form1_DragEnter;
}
private void button2_MouseDown(object sender, MouseEventArgs e)
{
//coordronnées d'origine
mDropOffset = e.Location;
this.DoDragDrop(button30, DragDropEffects.All);
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
//panel
Control ctl = (Control)sender;
//bouton
Button btn = (Button)(e.Data.GetData(typeof(Button)));
//position du bouton
btn.Location = ctl.PointToClient(new Point(e.X -
mDropOffset.X, e.Y - mDropOffset.Y));
//ajout du bouton au panel
ctl.Controls.Add(btn);
}
}
Avatar
Max
Oki merci, je vais aller tester çà : )
Maxime


"Olivier" a écrit dans le message de news:

Bonjour,

Voici un exemple qui fonctionne.
Attention il faut changer la position bouton, ne pas oublier les
AllowDrop = true, bien rajouter les Form1_DragDrop et Form1_DragEnter
partout ou c'est nécessaire.

Olivier

public partial class Form1 : Form
{
private Point mDropOffset;
public Form1() {
InitializeComponent();
this.AllowDrop = true;
this.panel1.AllowDrop = true;
this.button2.MouseDown += button2_MouseDown;
this.panel1.DragDrop += Form1_DragDrop;
this.panel1.DragEnter += Form1_DragEnter;
this.DragDrop += Form1_DragDrop;
this.DragEnter += Form1_DragEnter;
}
private void button2_MouseDown(object sender, MouseEventArgs e)
{
//coordronnées d'origine
mDropOffset = e.Location;
this.DoDragDrop(button30, DragDropEffects.All);
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
//panel
Control ctl = (Control)sender;
//bouton
Button btn = (Button)(e.Data.GetData(typeof(Button)));
//position du bouton
btn.Location = ctl.PointToClient(new Point(e.X -
mDropOffset.X, e.Y - mDropOffset.Y));
//ajout du bouton au panel
ctl.Controls.Add(btn);
}
}