C#-窗体移动

 #region 窗体移动API
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);
        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_MOVE = 0xF010;
        public const int HTCAPTION = 0x0002;
        [DllImport("user32")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
        private const int WM_SETREDRAW = 0xB;
        #endregion

 //窗体拖拽(包含双击最大化,根据两次点击的point判断是拖拽还是双击、坐标保存在SetForm.Tag)
            textBox1.MouseDown += delegate
            {
                if (this.Tag != null && ((int[])this.Tag)[0] == Control.MousePosition.X && ((int[])this.Tag)[1] == Control.MousePosition.Y)
                {

                        if (this.WindowState != FormWindowState.Maximized)
                        {
                            this.Opacity = 0;
                            this.Tag = null;
                            this.WindowState = FormWindowState.Maximized;
                        }
                        else
                        {
                            this.Tag = null;
                            this.WindowState = FormWindowState.Normal;
                            //InvalidateRect(IntPtr.Zero, IntPtr.Zero, true);
                        }
                    
                }
                else
                {
                    this.Tag = new int[2] { Control.MousePosition.X, Control.MousePosition.Y };
                }
                //刷新桌面
                if (this.WindowState == FormWindowState.Normal)
                {
                    ReleaseCapture();
                    SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
                }
            };

原文地址:https://www.cnblogs.com/csnd/p/12062184.html