WinFormフォームを移動させる方法は?

WinFormsでは、フォームの移動は次のメソッドで行うことができます。

  1. マウスイベントを利用する:マウスのボタンを押した、動かした、離したイベントを処理することでウィンドウの移動を実現する。ボタンを押したタイミングでマウスの初期位置を記録し、マウスを動かしたタイミングでマウスの移動量を算出し、ウィンドウの位置を修正することで移動を実現する。
private Point mouseOffset;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    mouseOffset = new Point(-e.X, -e.Y);
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Point mousePos = Control.MousePosition;
        mousePos.Offset(mouseOffset.X, mouseOffset.Y);
        Location = mousePos;
    }
}
  1. ウィンドウズメッセージの利用:フォームの移動を実現するには、フォームのWndProcメソッドをオーバーライドして、WM_NCHITTESTメッセージとWM_NCLBUTTONDOWNメッセージを処理する。WM_NCHITTESTメッセージはマウスのクリック位置の判定に、WM_NCLBUTTONDOWNメッセージはマウスの押下げイベントの処理に使用される。
private const int WM_NCHITTEST = 0x0084;
private const int HT_CAPTION = 0x0002;
private const int WM_NCLBUTTONDOWN = 0x00A1;

protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case WM_NCHITTEST:
            base.WndProc(ref m);
            if (m.Result.ToInt32() == HT_CAPTION)
                m.Result = new IntPtr(HT_CLIENT);
            return;
        case WM_NCLBUTTONDOWN:
            if ((int)m.WParam == HT_CAPTION)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, new IntPtr(HT_CAPTION), IntPtr.Zero);
            }
            break;
    }
    base.WndProc(ref m);
}

一般的な方法は2つあり、必要性に応じて適切な方法を選択します。

bannerAds