需求:放在图层上一个图片,要实现鼠标可以选中,并实现拖放功能。

需求分析:

1、采用winform方式实现;

2、需要一个PictureBox对象,对该PictureBox添加MouseMove,MouseDown,MouseUp事件。

3、MouseDown事件中:当鼠标在PictureBox对象中左键按下时,记录下鼠标相对PictureBox左上角的坐标点mouseDownPoint;

4、MouseMove事件中:先获取到当前鼠标所在位置,并减去鼠标左键按下时相对PictureBox左上角的坐标点,就是当前坐标要停留的坐标点位置。

在vs2010创建winform project,设置窗体如下:

运行结果:

实现代码:


 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace workflowPro
{
public partial class Main : Form
{
public Main()
{
InitializeComponent(); // 生成一个PictureBox对象
PictureBox pictureBox = new PictureBox();
pictureBox.Image = System.Drawing.Bitmap.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\a307536.gif");
pictureBox.Height = ;
pictureBox.Width = ; // 给PictureBox控件添加MouseDown/MouseUp/MouseMove事件
pictureBox.MouseDown += mouseDown;
pictureBox.MouseUp += mouseUp;
pictureBox.MouseMove += mouseMove; // 把PictureBox对象添加到Panel图层中。
this.panelWork.Controls.Add(pictureBox);
} // 存储当鼠标在PictureBox中左键按下的位置,相对于PictureBox左上角坐标点的位置来讲。
private Point mouseDownPoint = new Point();
// 就当前被操作的对象,实际上这里也可以不记录,统一使用事件中的sender对象转化。
private Control selectedControl = new Control(); /// <summary>
/// 当鼠标在PictureBox范围内,并且按下左键时,记录鼠标相对于PictureBox左上角坐标点的位置(相对PictureBox的坐标点)。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void mouseDown(object sender, MouseEventArgs e)
{
this.selectedControl = sender as Control; if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.lblPosition.Text = "(" + e.X + "," + e.Y + ")|"; mouseDownPoint = e.Location;
}
} void mouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left && this.selectedControl != null)
{
// 先获取到当前鼠标所在位置,并减去鼠标左键按下时相对PictureBox左上角的坐标点,就是当前坐标要停留的坐标点位置。
Point point = this.PointToClient(this.selectedControl.PointToScreen(new Point(e.X - mouseDownPoint.X, e.Y - mouseDownPoint.Y)));
this.selectedControl.Location = point; this.lblPosition.Text = "|(" + point.X + "," + point.Y + ")";
}
} void mouseUp(object sender, MouseEventArgs e)
{
this.selectedControl = null;
}
}
}

参考文章:

http://www.cnblogs.com/huaisha/archive/2013/03/24/2978145.html

 

c#:拖动功能的更多相关文章

  1. 仿酷狗音乐播放器开发日志二十七 用ole为窗体增加文件拖动功能(附源码)

    转载请说明原出处,谢谢~~ 中秋到了,出去玩了几天.今天把仿酷狗程序做了收尾,已经开发完成了,下一篇博客把完结的情况说一下.在这篇博客里说一下使用OLE为窗体增加文件拖拽的功能.使用播放器,我更喜欢直 ...

  2. canvas上画出坐标集合,并标记新坐标,背景支持放大缩小拖动功能

    写在前面:项目需求,用户上传一个区位的平面图片,用户可以在图片上添加新的相机位置,并且展示之前已绑定的相机坐标位置,图片支持放大缩小&拖动的功能.新增坐标,页面展示相对canvas定位,保存时 ...

  3. winform中拖动功能实现技巧

    实现的需求,我通过拖动选中的用户行放到左边的机构节点上,从而实现用户改变组织机构的关系 贴代码 private DataGridViewSelectedRowCollection sourceRowC ...

  4. PictureBox内的图片拖动功能

    当 PictureBox内的图片太大,超过PictureBox边框时可以用下面的方法来实现,   通过重绘来实现 :   Code bool wselected = false;  Point p = ...

  5. [TimLinux] JavaScript 模态框可拖动功能实现——jQuery版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. [TimLinux] JavaScript 模态框可拖动功能实现——节流版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. [TimLinux] JavaScript 模态框可拖动功能实现——原始版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. JavaScript 实现鼠标拖动元素

    一.前言 最开始实现鼠标拖动元素的目的就是在一个页面上拖动很多小圆点,用于固定定位,然后在复制HTML,粘贴在页面的开发代码中,就是这么一个功能,实现了很多遍,都没有做好,不得已采用了jQuery.f ...

  9. mac air/pro 启用三指拖动手势

    mac air/pro 启用三指拖动手势 一直以来用mac触控版丰富的手势来完成日常的工作,非常的效率和方便! 今天重新安装了系统发面三指拖动不好用了! 仔细查看了 设置--触控板 里面的各种选择尝试 ...

随机推荐

  1. 推荐的PHP编码规范

    推荐的PHP编码规范 发布时间: 2014-05-7 浏览次数:2754 分类: PHP教程 推荐的PHP编码规范 一 编辑器设置 1. 使用Tab缩进,不要使用空格 鉴于很多编辑器在保存文件时会自动 ...

  2. 4 bytes (32 bits) or 8 bytes (64 bits)

    Computer Systems A Programmer's Perspective Second Edition BusesRunning throughout the system is a c ...

  3. java动态联编

    JAVA中联编有两种,一种是动态联编,一种是静态联编. 动态联编:也叫多态联编或者是迟后联编,因为到底要调用哪一个函数,在编译时不能确定,而要推迟到运行中确定.也就是说,要等到程序运行时,确定了指针所 ...

  4. App之百度云推送

    集成SDK 下载最新的Android SDK压缩包并解压,在新建工程或已有工程中增加百度云推送功能. 我下载的是 ,里面有一个同名的文件夹,文件夹中有 导入云推送jar包和so文件: 将解压后的lib ...

  5. NodeJS模块的使用

    在NodeJS中,每个js文件就是一个模块,而文件路径就是模块名, 在编写每个模块时,都有require.exports.module三个预先定义好的变量可供使用. require函数用于在当前模块中 ...

  6. c#中如何将一个string数组转换为int数组

    举个例子. string[] strArray = "a,b,c,d,e,f,g".Split(new char[]{ ',' }); int[] intArray; //C# 3 ...

  7. Scrambled Polygon---poj2007(利用叉积排序)

    题目链接:http://poj.org/problem?id=2007 题意:乱序给出凸多边形的顶点坐标,要求按逆时 针顺序输出各顶点.给的第一个点一定是 (0,0),没有其他点在坐标轴上,没有三点 ...

  8. EChars学习-2

    上海的echars学习 <html> <head> <meta charset="utf-8"> <meta http-equiv=&qu ...

  9. Sql server中左连接语句

    数据库中学生表和课程表如下: 左连接sql语句: select a.studentName,a.studentAge,b.courseName from student a left join cou ...

  10. 如何将XML文件写入数据库

    将xml文件转成string public string XMLDocumentToString(XmlDocument doc) { MemoryStream stream = new Memory ...