You can start with something like this:
bool isDragged = false; Point ptOffset; private void button1_MouseDown( object sender, MouseEventArgs e ) { if ( e.Button == MouseButtons.Left ) { isDragged = true; Point ptStartPosition = button1.PointToScreen(new Point(eX, eY)); ptOffset = new Point(); ptOffset.X = button1.Location.X - ptStartPosition.X; ptOffset.Y = button1.Location.Y - ptStartPosition.Y; } else { isDragged = false; } } private void button1_MouseMove( object sender, MouseEventArgs e ) { if ( isDragged ) { Point newPoint = button1.PointToScreen(new Point(eX, eY)); newPoint.Offset(ptOffset); button1.Location = newPoint; } } private void button1_MouseUp( object sender, MouseEventArgs e ) { isDragged = false; }
source share