WinForm窗体移动事件自定义,WinForm控件移动 C#实现winform窗体拖动事件

本文主旨及简介:最近在一个桌面小项目上遇到一个需求,不算技术难题,就当记笔记了。

具体需求是自定义鼠标拖动窗体事件,那么WinForm窗体本身就融合了该事件,为什么还要自定义,原因就是当我们不需要WinForm那个古老古朴的界面的时候,用自定义控件或者其他控件覆盖窗体的时候,窗体就不能被鼠标选中进行拖动了,比如下面的界面

鼠标拖动控件这个操作一共有三个关联事件,分别是MouseMove鼠标移动 MouseDown鼠标点击 MouseUp鼠标松开抬起。在控件的事件属性中可以直接双击进入事件方法进行编辑,如下图

代码如下:

private bool isDragging = false;//用于跟踪用户是否正在拖动窗体
private Point lastCursor;//用于存储鼠标最后一次移动时的位置
private Point lastForm;//用于存储窗体在鼠标按下时的位置
// 处理标题面板鼠标移动事件的方法
private void uiTitlePanel1_MouseMove(object sender, MouseEventArgs e)
{
    if (isDragging)
    {
        // 计算鼠标移动的偏移量
        int deltaX = Cursor.Position.X - lastCursor.X;
        int deltaY = Cursor.Position.Y - lastCursor.Y;

        // 更新窗体的位置
        this.Location = new Point(lastForm.X + deltaX, lastForm.Y + deltaY);
    }
}

// 处理标题面板鼠标按下事件的方法
private void uiTitlePanel1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        isDragging = true;
        lastCursor = Cursor.Position;
        lastForm = this.Location;
    }
}

// 处理标题面板鼠标释放事件的方法
private void uiTitlePanel1_MouseUp(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        isDragging = false;
    }
}

总结:

这段代码的主要功能是实现窗体的拖动操作。通过监听 uiTitlePanel1 上的鼠标事件(按下、移动、释放),代码能够检测用户是否正在拖动窗体,并根据鼠标的移动动态更新窗体的位置。具体步骤如下:

  1. 当用户在 uiTitlePanel1 上按下鼠标左键时,开始记录鼠标和窗体的位置,并将 isDragging 设置为 true
  2. 当用户移动鼠标时,如果 isDragging 为 true,则计算鼠标的偏移量,并根据偏移量更新窗体的位置。
  3. 当用户释放鼠标左键时,将 isDragging 设置为 false,停止拖动操作。

通过这种方式,用户可以通过拖动 uiTitlePanel1 来移动整个窗体。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值