简要描述:
说到底还是对图片的控件进行缩放。及缩放picturebox控件,该图片控件缩放的最大范围为其依赖的panel(或者其他)控件决定。
1.通过鼠标滚轮事件MouseWheel进行缩放,往前滚动为放大,往后滚动为缩小。每次滚动的数值随着滚动方向,正负号不同。所以直接相加即可。当然还应该考虑到缩放后所带来的图片出框等问题。
2.鼠标拖拽应该考虑到,图片拖出去的问题。

1.添加几个鼠标事件:
MouseWheel、MouseDown、MouseMove1
2.MouseWheel:滚轮事件,控件中如果没有,需要手动添加:

// skinPictureBox1添加滚轮缩放时间
skinPictureBox1.MouseWheel += new MouseEventHandler(skinPictureBox1_MouseWheel);
skinPictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

3.上述事件代码如下:

/// <summary>
/// skinPictureBox1滚动缩放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinPictureBox1_MouseWheel(object sender, MouseEventArgs e)
{try{var t = skinPictureBox1.Size;int widthDate = t.Width + e.Delta;int heightDate = t.Height + e.Delta;// 限制缩小范围if (widthDate < skinPanel11.Width || heightDate < skinPanel11.Height){return;}// 限制放大范围5倍if (widthDate > (skinPanel11.Width*5) || heightDate > (skinPanel11.Height*5)){return;}t.Width = widthDate;t.Height = heightDate;skinPictureBox1.Size = t;// 防止缩放后,图片出框if (Math.Abs(skinPictureBox1.Location.X) > (skinPictureBox1.Width - skinPanel11.Width) || Math.Abs(skinPictureBox1.Location.Y) > (skinPictureBox1.Height - skinPanel11.Height)){skinPictureBox1.Location = new Point(skinPanel11.Width - t.Width, skinPanel11.Height - t.Height);}// 缩放后,其他业务处理}catch (Exception x){logger.Error("缩放异常:" + x.Message);}
}//鼠标移动
int xPos = 0;
int yPos = 0;
private void skinPictureBox1_MouseDown(object sender, MouseEventArgs e)
{xPos = e.X;//当前x坐标.yPos = e.Y;//当前y坐标.
}/// <summary>
/// 鼠标移动事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinPictureBox1_MouseMove1(object sender, MouseEventArgs e)
{try{// 鼠标按下拖拽图片if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right){// 限制拖拽出框if ((skinPictureBox1.Width - skinPanel11.Width) <= 0 || (skinPictureBox1.Height - skinPanel11.Height) <= 0){skinPictureBox1.Location = new Point(0,0);}else{if ((skinPictureBox1.Top + Convert.ToInt16(e.Y - yPos)) <= 0&& (skinPictureBox1.Left + Convert.ToInt16(e.X - xPos)) <= 0&& (skinPictureBox1.Right + Convert.ToInt16(e.X - xPos)) >= skinPanel11.Width&& (skinPictureBox1.Bottom + Convert.ToInt16(e.Y - yPos)) >= skinPanel11.Height){skinPictureBox1.Left += Convert.ToInt16(e.X - xPos);//设置x坐标.skinPictureBox1.Top += Convert.ToInt16(e.Y - yPos);//设置y坐标.}}}// 拖放后,其他业务处理}catch (Exception dd){logger.Error("鼠标移动异常:" + dd.Message);}
}

C#pictureBox滚轮缩放与拖拽相关推荐

  1. C# Winform 相册功能,图片缩放,拖拽,预览图分页

    效果 1.图片放大,缩小,拖拽功能 2.添加图片,分页功能 一.前言 在一些项目中也会用到预览图片的功能,至于为什么有一个添加图片的按钮,是因为有些项目,比如视觉相关的项目,摄像头拍摄图片,然后显示在 ...

  2. C#实现GDI+基本图的缩放、拖拽、移动

    C#实现GDI+基本图的缩放.拖拽.移动示例代码如下: using System;using System.Collections.Generic;using System.ComponentMode ...

  3. UE4 二维地图的缩放与拖拽操作

    这里写自定义目录标题 UE4 二维地图的缩放与拖拽操作 拖拽和缩放 基础搭建 添加小图标 地图缩放 地图拖拽 实现部分 效果展示 小图标的重合显示 效果展示 UE4 二维地图的缩放与拖拽操作 纯蓝图实 ...

  4. 图片的旋转,缩放和拖拽

    由于之前公司项目的原因,我被要求完成一个头像上传功能,其中包括要实现上传图片的旋转,缩放和拖拽,更关键的是要用JS实现... 作为一个不大喜欢用JS的人来说这是一个很严峻的挑战,不过随着项目的进行我的 ...

  5. html5 canvas图片缩放,拖拽

    想用html5 canvas来实现地图功能 主要是想把地图功能集合在系统中,而不是使用类似geoserver等发布,相当于两套系统了.地图是室内地图,所以高德百度什么的没用.我的理想情况是丢一副矢量图 ...

  6. flutter实现可缩放可拖拽双击放大的图片功能

    ### flutter_drag_scale ``` 可缩放可拖拽的功能,可实现图片或者其他widget的缩放已经拖拽 并支持双击放大的功能 ``` 我们知道官方提供了双击缩放,但是不支持拖拽的功能, ...

  7. 图片的缩放和拖拽功能

    缩放:监听滚轮的滚动滑动事件,然后改变图片的zomm属性 拖拽 : 获取鼠标单击后,X.Y挪动的像素,  图片使用定位,更改left和top的值 <template><div sty ...

  8. 禁止百度地图缩放和拖拽

    此处的bMap是自己存的变量名称,不是百度地图自带的 直接上代码了 bMap.disableDoubleClickZoom() //禁止缩放bMap.enableScrollWheelZoom(fal ...

  9. unity相机远近缩放和拖拽移动

    using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> // ...

最新文章

  1. 矩阵专职_新的篇章开始了-我将以专职技术作家的身份加入RunCloud
  2. jQuery1.8 css模块评析
  3. linux系统安装服务器过程,Linux系统服务器安装宝塔面板图文过程详解
  4. 如何用php编写注册表格,发布PHP-MySQL注册表格
  5. C++ 下一代标准库 tr1中默认的哈希 FNV hash
  6. javascript设计模式研究学习-设计模式类别
  7. 一个专科生学习JAVA目标月薪2万是否不切实际?
  8. 数据库设计-概念结构设计
  9. 微信localids上传自己服务器,移动端微信图片上传
  10. C#下对PDF文件进行电子图片签名
  11. 【Spikingjelly】SNN框架教程的代码解读_4
  12. 对HTML 标签语义化的理解,常见的语义化标签有哪些?
  13. HDU 4043 FXTZ II
  14. 小傻蛋的妹妹跟随小甲鱼学习Python的第四节004
  15. 基于 XDATCAR创建RMC_POT初始.cfg构型
  16. java计算机毕业设计在线点餐系统源码+mysql数据库+系统+lw文档+部署
  17. 利用python收集网上新闻-利用新闻情感数据炒股 python程序
  18. 前端后台以及游戏中使用Google Protocol Buffer详解
  19. scala语言命名规范
  20. 【C/C++】你知道位段吗?段位?不,是位段!

热门文章

  1. 【面试简历】软件测试,没有项目经历,简历怎么写?
  2. golang 实战企业网盘
  3. Linux系统中安装Oracle 数据库操作
  4. can‘t load package: cannot find module providing package github.com/hyperledger/fabric/core/chaincod
  5. HybridSN 高光谱分类
  6. Python(分治算法)问题 A: 找出伪币_给你一个装有n枚硬币的袋子。n枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这枚伪造的硬币。
  7. 【Python】基于Python的复杂网络传播动力学及其可视化
  8. 此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示
  9. 机器人队sw快速画图注意点
  10. 探究c++智能指针中auto_ptr_ref的存在意义