C#的System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问

重点在于获取Graphics对象,例如:

Graphics g = panel1.CreateGraphics

事实上CreateGraphics继承自Control, 即基本每一种控件都有这个方法

Control.CreateGraphics

在pannel、form上画图都一样,这里以pictureBox为例。DrawRectangle函数为例画矩形,其他形状不在这里考虑,自己尝试很简单

画圆是画椭圆,只需g.DrawEllipse后两个int参数width,height要设置相等,同时前两个int参数并不是圆心而是左上角的坐标,没有自带的circle函数只能自己封装

回到正题:

网上给的都是MouseDown  MouseMove MouseUp  Paint事件相关的代码,非常的简单。

using System.Drawing;bool bDrawStart = false;Point pointStart = Point.Empty;Point pointContinue = Point.Empty;private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (bDrawStart){bDrawStart = false;}else{bDrawStart = true;pointStart = e.Location;}}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (bDrawStart){pointContinue = e.Location;Refresh();}}private void pictureBox1_MouseUp(object sender, MouseEventArgs e){if (bDrawStart){dicPoints.Add(pointStart, pointContinue);}bDrawStart = false;}private void pictureBox1_Paint(object sender, PaintEventArgs e){if (bDrawStart){//实时的画矩形
Graphics g = e.Graphics;g.DrawRectangle(pen, pointStart.X, pointStart.Y, pointContinue.X -pointStart.X, pointContinue.Y - pointStart.Y);}pen.Dispose();}

用完就发现很明显的问题了,一次只能画一个图形

如何才能一次画多个呢?不少都说的重写Paint事件,override之类的函数,多麻烦。

试验修改Paint事件代码即可,定义一个字典表记录画过的矩形(根据对角两个点确定一个矩形,对应字典表的key, value,不考虑矩形相交重叠之类的情况),如下:

Dictionary<Point, Point> dicPoints = new Dictionary<Point, Point>();private void pictureBox1_Paint(object sender, PaintEventArgs e){System.Drawing.Pen pen = new System.Drawing.Pen(Color.LimeGreen);pen.Width = 2;if (bDrawStart){//实时的画矩形
Graphics g = e.Graphics;g.DrawRectangle(pen, pointStart.X, pointStart.Y, pointContinue.X - pointStart.X, pointContinue.Y -pointStart.Y);}//实时的画之前已经画好的矩形foreach (var item in dicPoints){Point p1 = item.Key;Point p2 = item.Value;e.Graphics.DrawRectangle(pen, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.Y);}pen.Dispose();}

C# winform开发:Graphics、pictureBox同时画多个矩形相关推荐

  1. 画多个矩形c语言,C# winform开发:Graphics、pictureBox同时画多个矩形

    C#的System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问 重点在于获取Graphics对象,例如: Graphics g = panel1.CreateGraphics 事实 ...

  2. C# WinForm开发系列 - GDI+【转】

    http://blog.csdn.net/blue_sky6/article/details/53811435?locationNum=6&fps=1 C# WinForm开发系列 - GDI ...

  3. python winform开发_c#教程之.Net WInform开发笔记(三)谈谈自制控件(自定

    末日这天写篇博客吧,既然没来,那就纪念一下. 这次谈谈自制控件,也就是自定义控件,先上图,再说 1.扩展OpenFileDialog,在OpenFileDialog中添加各种文件(.txt,.jpg, ...

  4. Winform开发中手写签名的实现

    由于项目的需要,需要在项目的Winform系统的一个模块中集成手写签名的功能,一开始对这块不是很了解,只是了解他能够替代鼠标进行签名.既然是签名,一般就是需要记录手稿图片,作为一个记录核实的凭证,因为 ...

  5. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序...

    GitHub:https://github.com/iccb1013/Sheng.Winform.IDE SailingEase WinForm Framework WinForm开发框架开发手册:h ...

  6. C#学习(二十五)——如何在PictureBox上画十字架

    上图是在picturebox里面画十字架 代码如下: //加载picturebox的Paint事件private void pictureBoxImg_Paint(object sender, Pai ...

  7. VS2017 winform开发知识点汇总

    VS2017 winform开发知识点汇总 1 快捷键 2 控键缩写 2.1 标准控件 2.2 容器控件 2.3 菜单和工具栏 2.4 数据 2.5 对话框 2.6 组件 2.7 印刷 2.8 水晶报 ...

  8. C#WinForm开发:如何将图片添加到项目资源文件(Resources)中

    C#WinForm开发:如何将图片添加到项目资源文件(Resources)中 引言 操作步骤 实例应用 功能延展 引言 在C#Winform开发中,有时需要在控件中插入一些图片,常见的有picture ...

  9. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    SailingEase WinForm Framework WinForm开发框架开发手册:http://docs.shengxunwei.com/Home/Browser/sewinformfw/ ...

最新文章

  1. 【pytorch】nn.conv2d的使用
  2. read write spinlock
  3. 奥运会上刷新亚洲记录的211高校副教授苏炳添论文被扒出,网友:膜拜大神!...
  4. 边缘设备上的实时AI人员检测:检测视频中的人员
  5. android常见的面试题,Android常见笔试面试题
  6. python中包引入遇到的问题
  7. bzoj3669(NOI2014)魔法森林
  8. SQL语句优化技术分析 整理他人的
  9. JS === 实现多个光标跟随事件
  10. python画circos图_CIRCOS圈图绘制 – 最简单绘图和解释
  11. pm2开机启动项目脚本
  12. LED背光源的正反面怎么区分?
  13. 微信公众号开发之上传临时素材
  14. 爬虫爬出来的数据不全_Web Scraper教程(二)爬虫入门之当当畅销书爬取
  15. 如何在安装时备份sis文件
  16. 当今世界最NB的25位大数据科学家
  17. 全国计算机等级考试 三级网络技术 知识点总结
  18. Java swing简易浏览器(其二)前进后退与收藏夹实现
  19. 小米推行高端化战略,但失去性价比优势或是它不可承受之重
  20. 开心消消乐在屏幕中向下移动的完整代码

热门文章

  1. python监听多个udp端口_Python的Socket编程过程中实现UDP端口复用的实例分享
  2. 异常检测-LocalOutlierFactor的理解与应用
  3. Linux之后台运行(nohup和)
  4. gmail注册手机号不能用于验证_注册Google帐户手机号无法验证的问题
  5. 网络爬虫(urllib超详细使用指南)
  6. 算法题目中元素为二元(坐标)的几种解决方法
  7. 科学计算机乱码,软件界面乱码可以这么“破”
  8. mysql 死锁原因_Mysql并发时经典常见的死锁原因及解决方法
  9. 腾讯云【人脸识别】服务的一次尝试(JAVA)
  10. linux下文件操作