C# WinForm实现窗体上控件自由拖动功能示例

实现窗体上控件自由拖动功能的步骤

  1. 在窗体的MouseDown事件中记录鼠标按下时控件的位置,并将控件的Capture属性设置为True,保证鼠标控制焦点在控件上。
  2. 在窗体的MouseMove事件中,判断是否鼠标已经按下并且移动过,如果是,则根据鼠标移动的偏移量调整控件的位置。
  3. 在窗体的MouseUp事件中,将控件的Capture属性设置为False,释放鼠标的控制焦点。

示例1:实现标签控件在窗体上自由拖动

private Point _mouseOffset; // 鼠标拖动时控件相对窗体的偏移量

private void label1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        _mouseOffset = new Point(-e.X, -e.Y); // 记录鼠标按下时控件左上角和鼠标位置之间的偏移量
        label1.Capture = true; // 设置控件为鼠标捕获状态,以保证鼠标控制焦点在控件上
    }
}

private void label1_MouseMove(object sender, MouseEventArgs e)
{
    if (label1.Capture)
    {
        Point mousePos = MousePosition;
        mousePos.Offset(_mouseOffset.X, _mouseOffset.Y);
        label1.Location = PointToClient(mousePos); // 将鼠标移动的偏移量应用到控件的位置上
    }
}

private void label1_MouseUp(object sender, MouseEventArgs e)
{
    label1.Capture = false; // 释放控件的鼠标捕获状态
}

示例2:实现窗体上所有按钮控件自由拖动

private Dictionary<Button, Point> _buttonPositions = new Dictionary<Button, Point>(); // 保存所有按钮控件的原始位置

private void Form1_Load(object sender, EventArgs e)
{
    // 记录所有按钮控件的原始位置
    foreach (Control control in Controls)
    {
        if (control is Button button)
        {
            _buttonPositions[button] = button.Location;
        }
    }
}

private void button_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Button button = (Button)sender;
        _mouseOffset = new Point(-e.X, -e.Y); // 记录鼠标按下时控件左上角和鼠标位置之间的偏移量
        button.Capture = true; // 设置控件为鼠标捕获状态,以保证鼠标控制焦点在控件上
    }
}

private void button_MouseMove(object sender, MouseEventArgs e)
{
    if (((Button)sender).Capture)
    {
        Point mousePos = MousePosition;
        mousePos.Offset(_mouseOffset.X, _mouseOffset.Y);
        ((Button)sender).Location = PointToClient(mousePos); // 将鼠标移动的偏移量应用到控件的位置上
    }
}

private void button_MouseUp(object sender, MouseEventArgs e)
{
    ((Button)sender).Capture = false; // 释放控件的鼠标捕获状态
}

private void btnReset_Click(object sender, EventArgs e)
{
    // 将所有按钮控件的位置还原到原始位置
    foreach (var buttonPosition in _buttonPositions)
    {
        buttonPosition.Key.Location = buttonPosition.Value;
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# WinForm实现窗体上控件自由拖动功能示例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 深入解析Java的设计模式编程中单例模式的使用

    深入解析Java的设计模式编程中单例模式的使用 什么是单例模式 单例模式是一种常用的创建型设计模式,它保证一个类只有一个实例,并且提供了能访问这个实例的全局访问点。在实际的开发中,单例模式被广泛应用。 单例模式的使用场景 在如下场景中,通常建议使用单例模式: 系统中只需要存在一个实例对象 系统频繁创建和销毁对象,造成大量的资源浪费时 全局操作都能够使用同一个…

    other 2023年6月27日
    00
  • 浅析在 RHEL8 配置静态 IP 地址的不同方法

    浅析在 RHEL8 配置静态 IP 地址的不同方法 在 RHEL8 中,有多种方法可以配置静态 IP 地址。下面将详细介绍两种常用的方法,并提供示例说明。 方法一:使用 Network Manager 打开终端并以 root 用户身份登录。 使用以下命令编辑 Network Manager 配置文件: vi /etc/sysconfig/network-sc…

    other 2023年7月31日
    00
  • vs程序运行时出现未加载wntdll.pdb错误的原因及解决办法

    以下是关于“vs程序运行时出现未加载wntdll.pdb错误的原因及解决办法”的完整攻略,过程中包含两个示例。 背景 使用Visual Studio编写程序时,有时会出现未加载wntdll.pdb错误。这个错误通常是由于缺少或损坏的PDB文件引起的。在本攻略中,我们将讨论这个错误的原因,并提供解决办法。 错误原因 未加载wntdll.pdb错误通常是由于以下…

    other 2023年5月9日
    00
  • Android软件更新安装。

    Android软件更新安装 Android系统是目前全球使用最广泛的移动操作系统之一,而Android软件的更新也是我们日常使用中必不可少的部分。在智能手机上,软件更新可以提升手机性能、修复已知漏洞和缺陷、引入新特性等。本篇文章将提供详细的步骤教你如何更新和安装Android软件。 步骤一:检查软件更新 在Android设备上,我们可以通过以下步骤来检查软件…

    其他 2023年3月28日
    00
  • 微信小程序页面生命周期详解

    微信小程序页面生命周期详解 微信小程序是一种轻量级的应用程序,由于其小巧灵活,短时间内便可开始运作等特点,越来越受开发人员喜爱。在开发小程序页面时,了解各个生命周期函数的调用顺序和作用,对于开发高质量的小程序至关重要。 页面生命周期函数介绍 以下是微信小程序页面的生命周期函数: 生命周期函数 触发时间 作用 onLoad 页面加载时 在页面被展示前,执行页面…

    other 2023年6月27日
    00
  • 浅谈Java中父类与子类的加载顺序详解

    浅谈Java中父类与子类的加载顺序详解 在Java中,当我们定义了一个类时,JVM会按照一定的顺序进行类的加载。这个加载的过程中包含了类的初始化、父子类的加载、静态成员变量的赋值等内容。父类与子类的加载顺序是其中一项比较重要的内容。下面我们就来详细讲解一下Java中父类与子类的加载顺序。 父类的加载顺序 父类的加载顺序总是在子类之前。当我们定义一个子类时,如…

    other 2023年6月26日
    00
  • Android 未读消息的红点显示

    Android 未读消息的红点显示攻略 在Android应用中,未读消息的红点显示是一种常见的用户界面设计元素,用于提醒用户有未读的消息。下面是一个详细的攻略,介绍如何实现这一功能。 步骤一:准备工作 在开始之前,确保你已经具备以下条件:- 你已经熟悉Android开发环境,并且具备基本的Java或Kotlin编程知识。- 你已经创建了一个Android项目…

    other 2023年9月6日
    00
  • Win10 PC build 10240.17354更新补丁KB4015221下载地址(附更新内容)

    Win10 PC build 10240.17354更新补丁KB4015221下载地址(附更新内容)攻略 1. 简介 本攻略将详细讲解如何下载和安装Win10 PC build 10240.17354的更新补丁KB4015221,并提供更新内容的附加信息。 2. 下载地址 你可以从以下链接下载Win10 PC build 10240.17354更新补丁KB4…

    other 2023年8月5日
    00
合作推广
合作推广
分享本页
返回顶部