失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C#实现winform窗体拖动事件

C#实现winform窗体拖动事件

时间:2022-01-09 13:44:58

相关推荐

C#实现winform窗体拖动事件

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{///写入窗体控制代码}

如果觉得《C#实现winform窗体拖动事件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。