tags:

views:

34

answers:

1

I create a new Windows Forms Application. I drag a button on to the form. I need to drag and drop this button to another location within this form at run time. any code snippets or links are appreciated.

I spent half an hour searching before coming here.

A: 

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(e.X, e.Y));

        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(e.X, e.Y));
        newPoint.Offset(ptOffset);
        button1.Location = newPoint;
     }
  }

  private void button1_MouseUp( object sender, MouseEventArgs e )
  {
     isDragged = false;
  }
msergeant
Thanks for your response. I tried this but the button still just sits there at its original location. I moved the code in MouseMove handler in MouseUp handler and now the button moves to new location. the new location is bit erratic. need to figure out that part. but thanks again for your help
CodingJoy
The erratic location is probably due to the offset. You get mouse coordinates in a different format than the screen coordinates of the location. That's the reason for the calls to PointToScreen.
msergeant