Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >WinForm 实现鼠标拖动控件跟随效果(图文)

WinForm 实现鼠标拖动控件跟随效果(图文)

作者头像
vv彭
发布于 2021-01-18 02:14:28
发布于 2021-01-18 02:14:28
2.3K00
代码可运行
举报
文章被收录于专栏:c#学习笔记c#学习笔记
运行总次数:0
代码可运行

1. 运行初始窗口如下:

2. 拖动后效果如下:

3. 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

public partial class Form1 : Form
{
    /*
     * 理解了下面的几个概念,就能完全明白相对坐标的变化.
     * MouseEventArgs e 为事件鼠标参数,因此,e.Location 指示了位于事件源上的光标坐标
     * Cursor.Position 获取的是相对于用户屏幕的光标坐标
     * PointToClient() 方法可将屏幕坐标 Cursor.Position 换算成工作区的坐标
     * 因此,换算后的 Cursor.Position 减去 e.Location 得到的始终是事件源的 Location
    */

    /// <summary>
    /// 鼠标按下为true
    /// </summary>
    private bool Mousedown;

    /// <summary>
    /// 鼠标在事件源的位置
    /// </summary>
    private int CurX = 0;
    private int CurY = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void Controls_MouseDown(object sender, MouseEventArgs e)
    {
        CurX = e.X;
        CurY = e.Y;
        Mousedown = true;
        if (sender is TextBox)
        {
            ((TextBox)sender).Cursor = Cursors.Arrow;
        }
    }

    private void Controls_MouseMove(object sender, MouseEventArgs e)
    {
        if (Mousedown)
        {
            // 获取当前屏幕的光标坐标
              Point pTemp = new Point(Cursor.Position.X, Cursor.Position.Y);
            // 转换成工作区坐标
              pTemp = this.PointToClient(pTemp);
            // 定位事件源的 Location
            Control control = sender as Control;
            control.Location = new Point(pTemp.X - CurX, pTemp.Y - CurY);                
        }
    }

    private void Controls_MouseUp(object sender, MouseEventArgs e)
    {
        Mousedown = false;
        if (sender is TextBox)
        {
            ((TextBox)sender).Cursor = Cursors.IBeam;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-12-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(六十九)c#Winform自定义控件-垂直滚动条
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/29
1.8K0
(六十九)c#Winform自定义控件-垂直滚动条
(二十)c#Winform自定义控件-有后退的窗体
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/11
4520
(二十)c#Winform自定义控件-有后退的窗体
手写代码实现窗体的拖动效果
public partial class Form1 : Form { private Point oldPoint = new Point(0,0); public Form1() { InitializeComponent(); } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEvent
liulun
2022/05/09
4760
一款简单的缩放拖拽图片控件
SQPhoto 是一个 Windows 桌面应用的组件,支持 .NET6 和 .NET Framework 4.6 + 。基于 PictureBox 的图片展示工具,增加了拖动和缩放功能,便于在某些场景下的图片展示,比如我前面开发的 Snipping_OCR[2] 工具就使用了这个组件。
桑榆肖物
2022/11/18
1K0
一款简单的缩放拖拽图片控件
关于DevExpress的XtraTreeList使用方法总结
树形控件是使用频率很高的一种控件。对于属性控件往往需要下面两个功能 1.TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中)。使用DevXpress的TreeList控件很容易实现这一功能。 设置TreeList.OptionsView.ShowCheckBoxes = true            //是否显示CheckBox 设置TreeList.OptionsBehavior.AllowIndeterminateCheckState
跟着阿笨一起玩NET
2018/09/18
2.4K0
C#Winform窗口移动
在我们将Winform自带的边框隐藏之后,我们需要自己编写窗口的移动。 思路就是1.获得点击左键时当前鼠标的坐标 2.获得移动后鼠标的坐标 3.窗体的坐标=移动后的鼠标坐标-移动前的鼠标坐标
MaybeHC
2024/04/23
1880
C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘
尽管加入了放大镜的功能,可是在进行像素级的定位时,还是不easy精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的。
全栈程序员站长
2022/07/06
4040
WinForm 应用程序的事件参数
在 WinForm 应用程序的事件驱动编程模型中,事件参数是事件处理方法中的重要组成部分,它包含了与事件相关的额外信息。不同类型的事件可能有不同类型的事件参数,下面将详细介绍如何处理常见的事件参数。
郑子铭
2025/03/31
640
WinForm 应用程序的事件参数
c#之splitcontainer类(接口)
tcbs系统中用到,故大约了解下用法: http://msdn.microsoft.com/zh-cn/library/system.windows.forms.splitcontainer.aspx
全栈程序员站长
2022/09/09
6510
(七十五)c#Winform自定义控件-控件水印组件
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/29
8410
(七十五)c#Winform自定义控件-控件水印组件
WPF中Canvas和InkCanvas
InkCanvas本身已经支持使用鼠标或者触屏来画线,下面的示例是使用代码进行画线。
码客说
2023/07/11
1.3K0
Silverlight自定义鼠标
  http://msdn.microsoft.com/zh-cn/library/system.windows.input.cursor(VS.95).aspx
dino.c
2019/01/18
6870
Silverlight自定义鼠标
捕捉DataGrid的双击事件
namespaceDataGridDoubleClick{usingSystem;usin运维
Java架构师必看
2021/03/22
1.7K0
(十二)c#Winform自定义控件-分页控件
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/11
3.3K0
(十二)c#Winform自定义控件-分页控件
c# 可移动可改变大小的控件
因为业务需要,百度了个可移动可改变大小的控件,然后自己修改了下,功能类似vs的设计面板中的功能差不多,可拖拽,改变大小
冰封一夏
2019/09/11
2K0
【愚公系列】2023年11月 Winform控件专题 ContextMenuStrip控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
1.3K0
(五十)c#Winform自定义控件-滑块
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/09
9090
(五十)c#Winform自定义控件-滑块
WinForm 拖动控件
private Point mouseOffset; private void label1_MouseDown(object sender, MouseEventArgs e) {     mouseOffset = new Point(-e.X, -e.Y); } private void label1_MouseMove(object sender, MouseEventArgs e) {     if (e.Button == MouseButtons.Left)     {         Poi
跟着阿笨一起玩NET
2018/09/18
2.8K0
(二)c#Winform自定义控件-按钮
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/11
1.5K0
(二)c#Winform自定义控件-按钮
c#基于Tablet pc实现的手写输入
需要安装Tablet pc,win7的话 直接在控制面板》程序和应用》添加组建里面勾选上添加
冰封一夏
2019/09/11
1.2K0
相关推荐
(六十九)c#Winform自定义控件-垂直滚动条
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验