Formクラスを継承したクラスで、WndProc()メソッドをオーバーライドし、WM_SYSCOMMANDでのSC_MOVE, SC_TASKLIST, SC_RESTOREの各メッセージに対して、デフォルトの処理を行わないことでウィンドウの移動をキャンセルする。

public class Form1 : System.Windows.Forms.Form
{
    // 途中略

    // WndProcメソッドをオーバーライド
    protected override void WndProc( ref Message m )
    {
        const int WM_SYSCOMMAND = 0x0112;
        const int SC_RESTORE    = 0xf120;
        const int SC_TASKLIST   = 0xf130;
        const int SC_MOVE       = 0xf010;

        // メッセージがWM_SYSCOMMANDの時
        if ( m.Msg == WM_SYSCOMMAND ) 
        {
            // 下位4ビット以外を取得
            int command = m.WParam.ToInt32() & 0xfff0;

            if ( command == SC_MOVE || command == SC_TASKLIST || command == SC_RESTORE ) 
            {
                // 戻り値に0を指定する
                m.Result = IntPtr.Zero;
            }
            else
            {
                // デフォルトの処理を行う
                base.WndProc( ref m );
            }
        }
        else
        {
            // デフォルトの処理を行う
            base.WndProc( ref m );
        }
    }
}
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
#End Region

    ' WndProcメソッドをオーバーライド
    Protected Overloads Overrides Sub WndProc(ByRef m As Message)

        Const WM_SYSCOMMAND As Integer= &H112
        Const SC_RESTORE As Integer = &HF120
        Const SC_TASKLIST As Integer = &HF130
        Const SC_MOVE As Integer = &HF010

        ' メッセージがWM_SYSCOMMANDの時
        If m.Msg = WM_SYSCOMMAND Then

            ' 下位4ビット以外を取得
            Dim command As Integer = m.WParam.ToInt32() And &HFFF0

            If command = SC_MOVE OrElse _
               command = SC_TASKLIST OrElse _
               command = SC_RESTORE Then

                ' 戻り値に0を指定する
                m.Result = New IntPtr(0)

            Else

                ' デフォルトの処理を行う
                MyBase.WndProc(m)

            End If

        Else

            ' デフォルトの処理を行う
            MyBase.WndProc(m)

        End If

    End Sub

End Class