title: Move controls when Drag and drop on panel in C#
body: <p>I want to drag controls on panel and when dragging I want to move the control and get its location to drop on to panel. I have tried out mouseUp, mouseDown, MouseMove events of control.But that is not what I am looking for. I want to fire DragDrop event on panel and move control. Can I do this? If you can give me an idea it will be great. Below is part of my code. Please correct me. Thanks a lot.</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  
  namespace DragnDrop
  {
      public partial class Form1 : Form
      {
  
          public Form1()
          {
              InitializeComponent();
          }
          Control mycontrol;
          int x, y;
          //Form1 f = new Form1();
          private void Form1_Load(object sender, EventArgs e)
          {
  
              foreach (Control c in this.panel1.Controls)
              {
                  c.MouseMove += new MouseEventHandler(lblDragger_MouseMove);
                  c.MouseUp += new MouseEventHandler(lblDragger_MouseUp);
                  c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
                  c.MouseDoubleClick += new MouseEventHandler(pictureBox1_MouseDown);
              }
              panel2.AllowDrop = true;
              foreach (Control c in this.panel2.Controls)
              {
                  c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
              }
              panel2.DragOver += new DragEventHandler(panel2_DragOver);
              panel2.DragDrop += new DragEventHandler(panel2_DragDrop);  
          }
  
          bool isDragging ;
          int  clickOffsetX ;
          int  clickOffsetY ;
  
          private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
          {
              //  this.Cursor = Cursors.SizeAll;
              //pictureBox1 = (PictureBox)sender;
              Control c = sender as Control;
  
              //DoDragDrop(pictureBox1.Image, DragDropEffects.Copy);
              // validation = true;
              isDragging = true;
              clickOffsetX = e.X;
              clickOffsetY = e.Y;
              //  c.DoDragDrop(c, DragDropEffects.Move);  
          }
  
          private void lblDragger_MouseUp(System.Object sender, System.Windows.Forms.MouseEventArgs e)
          {
              isDragging = false;
          }
  
          private void panel2_DragEnter(object sender, DragEventArgs e)
          {
              if (e.Data.GetDataPresent(typeof(Bitmap)))
              {
                  e.Effect = DragDropEffects.Copy;
              }
              else
              {
                  e.Effect = DragDropEffects.None;
              }
          }
  
          private void panel2_DragOver(object sender, DragEventArgs e)
          {
              e.Effect = DragDropEffects.Move;  
          }
  
          private void panel2_DragDrop(object sender, DragEventArgs e)
          {
              Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
              mycontrol = c;
              if (c != null)
              {
                  c.Location = this.panel2.PointToClient(new Point(e.X, e.Y));
                  this.panel2.Controls.Add(c);
              }  
          }
  
          private void lblDragger_MouseMove(System.Object sender,
            System.Windows.Forms.MouseEventArgs e)
          {
              Control c = sender as Control;
              // bool isDragging = true;
              if (isDragging == true)
              {
                  c.Left = e.X + c.Left - clickOffsetX;
                  c.Top = e.Y + c.Top - clickOffsetY;
              }
          }
  
          private void panel1_MouseLeave(object sender, EventArgs e)
          {
              Control c = sender as Control;
  
              c.DoDragDrop(c, DragDropEffects.Move); 
          }
      }
  }
  </code></pre>