I had the same question a while ago and while searching for the answer I found the code below(don't remember the website) and Here is what I do:
Point mousedownpoint = Point.Empty;
private void Form_MouseDown(object sender, MouseEventArgs e)
{
mousedownpoint = new Point(e.X, e.Y);
}
private void Form_MouseMove(object sender, MouseEventArgs e)
{
if (mousedownpoint.IsEmpty)
return;
Form f = sender as Form;
f.Location = new Point(f.Location.X + (e.X - mousedownpoint.X), f.Location.Y + (e.Y - mousedownpoint.Y));
}
private void Form_MouseUp(object sender, MouseEventArgs e)
{
mousedownpoint = Point.Empty;
}