1.有边框窗体鼠标拖动事件:窗体的FormBorderStyle设置为None
Point mousePosition;Point formPosition;bool isMouseDown = false;//是否按下bool isMouseIn = false;//是否在窗体内//鼠标按下注意GxSingleCam改成自己的Form窗体名字,也就是namespace GxSingleCam{public partial class GxSingleCam : Form//此处:Form前自己定义的窗体的名字......private void GxSingleCam_MouseDown(object sender, MouseEventArgs e){isMouseDown = true;mousePosition = Control.MousePosition; //鼠标位置formPosition = this.Location; //窗体左上角位置}private void GxSingleCam_MouseUp(object sender, MouseEventArgs e){isMouseDown = false;}private void GxSingleCam_MouseMove(object sender, MouseEventArgs e){Point mousePoint = Control.MousePosition; //移动的位置if (isMouseDown && isMouseIn)this.Location = new Point(mousePoint.X - mousePosition.X + formPosition.X, mousePoint.Y - mousePosition.Y + formPosition.Y);}private void GxSingleCam_MouseEnter(object sender, EventArgs e){isMouseIn = true;}private void GxSingleCam_MouseLeave(object sender, EventArgs e){isMouseIn = false;}
2.无边框窗体鼠标拖动事件
加入命名空间:using System.Runtime.InteropServices;
//命名空间using System.Runtime.InteropServices;
//无窗体拖拽[DllImport("user32.dll")]//拖动无窗体的控件public static extern bool ReleaseCapture();[DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);public const int WM_SYSCOMMAND = 0x0112;public const int SC_MOVE = 0xF010;public const int HTCAPTION = 0x0002;1.同上此处的GxSingleCam改成自己的窗体名称:2.此处的GxSingleCam_MouseDown是鼠标生成事件,具体的生成操作如代码段下方示例:///private void GxSingleCam_MouseDown(object sender, MouseEventArgs e){//拖动窗体ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);}
鼠标生成事件操作:
1.点击.cs[设计]窗口:
2.查看右侧的属性窗口,点击闪电符号,并在下方找到鼠标:
3.最后点击MouseDown生成如下的鼠标方法:
private void GxSingleCam_MouseDown(object sender, MouseEventArgs e){///空鼠标事件,要先在属性窗口中将此事件添加进来(点击闪电符号,找到MouseDown,双击)}
4.最后在上面的鼠标方法中加入如下代码:
ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
private void GxSingleCam_MouseDown(object sender, MouseEventArgs e){//拖动窗体ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);}
注意:想用其他空间实现窗体拖动功能,先要点击.cs[设计],选择闪电符号,然后点击MouseDown、MouseUp、MouseMove生成三个鼠标事件,参考代码如下:
Point mouseOff;//鼠标移动位置变量bool leftFlag;//标签是否为左键private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //得到变量的值leftFlag = true; //点击左键按下时标注为true;}}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (leftFlag){Point mouseSet = Control.MousePosition;mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置Location = mouseSet;}}private void pictureBox1_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}
注意,上面代码就在窗体代码中写就可以了,如:
public partial class GxSingleCam : Form{///写入窗体控制代码}