フォームをドラッグして移動させる方法(C#用メモ)

フォームをマウスでドラッグして移動させる方法。
タイトルバーのないウィンドウも、この方法で移動させることが出来ます。

マウスのボタンが押されたとき、マウスポインタの位置を保存しておきます。
次にマウスが動いたとき、保存しておいたマウスポインタの位置と今の座標の差(移動距離)を計算し、フォームを移動させます。

// マウスポインタの位置を保存する
private Point mousePoint;

//マウスのボタンが押されたとき
private void Form1_MouseDown(object sender,
    System.Windows.Forms.MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        //位置を記憶する
        mousePoint = new Point(e.X, e.Y);
    }
}

//マウスが動いたとき
private void Form1_MouseMove(object sender,
    System.Windows.Forms.MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        this.Left += e.X - mousePoint.X;
        this.Top += e.Y - mousePoint.Y;
    }
}

フォームの初期化処理で、MouseDown、MouseMoveイベントハンドラに、定義したメソッドを追加します。

//
//  コンストラクタ
//
public Form1()
{
    :
    :

    // マウス移動イベントを追加
    this.MouseDown += new MouseEventHandler(Form1_MouseDown);
    this.MouseMove += new MouseEventHandler(Form1_MouseMove);

    :
    :
}

なお、この状態ではフォーム上でマウスをドラッグした場合は移動できますが、フォーム上のコントロールの上でドラッグした場合は移動できません。これを行うためには、そのコントロールのMouseDown、MouseMoveイベントハンドラにも、定義したメソッドを追加します。方法は、フォームのイベントハンドラに追加したのと同じです。