C#点击窗口任意位置拖动窗口代码(真实有效)

网上找了半天, 实在是受不了了, 算法和代码自己摸出来了, 别问为什么, 拿走不谢

using System.Drawing;	//point 要用这个
using System.Windows.Forms;

namespace Example
{
    public partial class FormThreeShow : Form
    {
		private static bool IsDragging = false;	//用于指示当前是不是在拖拽状态
		private Point StartPoint = new Point(0, 0);	//记录鼠标按下去的坐标, new是为了拿到空间, 两个0无所谓的
		//记录动了多少距离,然后给窗体Location赋值,要设置Location,必须用一个Point结构体,不能直接给Location的X,Y赋值
		private Point OffsetPoint = new Point(0, 0);

		public FormThreeShow()
        {
            InitializeComponent();
        }

		private void FormThreeShow_MouseDown(object sender, MouseEventArgs e)
		{
			//如果按下去的按钮不是左键就return,节省运算资源
			if (e.Button != MouseButtons.Left)
			{
				return;
			}
			//按下鼠标后,进入拖动状态:
			IsDragging = true;
			//保存刚按下时的鼠标坐标
			StartPoint.X = e.X;
			StartPoint.Y = e.Y;
		}

		private void FormThreeShow_MouseMove(object sender, MouseEventArgs e)
		{
			//鼠标移动时调用,检测到IsDragging为真时
			if (IsDragging == true)
			{
				//用当前坐标减去起始坐标得到偏移量Offset
				OffsetPoint.X = e.X - StartPoint.X;
				OffsetPoint.Y = e.Y - StartPoint.Y;
				//将Offset转化为屏幕坐标赋值给Location,设置Form在屏幕中的位置,如果不作PointToScreen转换,你自己看看效果就好
				Location = PointToScreen(OffsetPoint);
			}
		}

		private void FormThreeShow_MouseUp(object sender, MouseEventArgs e)
		{
			//左键抬起时,及时把拖动判定设置为false,否则,你也可以试试效果
			IsDragging = false;
		}
	}
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值