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 dicPoints = new Dictionary();

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

System.Drawing.Pen pen = new System.Drawing.Pen(Color.LimeGreen);

pen.Width = ;

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();

}

【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出

篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

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

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

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

直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

基于BindingSource的WinForm开发

BindingSource控件介绍 BindingSource控件介绍 BindingSource控件是.NET Framework 2.0提供的新控件之一.BindingSource控件与数据源建立 ...

Java进击C#——应用开发之WinForm开发

本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...

WinForm开发-界面控件到实体,实体到界面控件自动绑定

在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

WPF与WinForm开发有什么区别?

转自http://hi.baidu.com/leoliu83/blog/item/1d1a4a66dcb41134aa184cfd.html WPF开发于WinForm之后,从技术发展的角度,WPF比 ...

在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储

在上篇随笔中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如 ...

随机推荐

(转)CString截取字符串全攻略

附:去掉空格方法 CString str("e w r we  中华ADF 华AG中"); newstr=str.Replace(" ", "&quo ...

Elasticsearch 权威指南

Elasticsearch 权威指南 http://fuxiaopang.gitbooks.io/learnelasticsearch/content/index.html

VB.NET 注册表基本操作

''' ''' 注册表设置值 ''' '''

Vi 的基本使用

一.Vi入门  Unix 提供了全屏幕的Vi编辑器,这使我们的工作轻松不少.不少DOS用户抱怨Vi编辑器不象DOS下的编辑器如edit那么好用,这 是因为Vi考虑到各种用户的需要,没有使用某些通用的编 ...

QMessageBox

#include "dialog.h" #include "ui_dialog.h" #include Dialog::D ...

Java-->利用URL类下载图片

--> 通过get 请求访问图片地址,将通过服务器响应的数据(即图片数据)存到本地文件中... --> HttpURLConnectionUtil 工具类 package com.drag ...

五、Spring ——单元测试

1.JUnit4 JUnit测试用例的完整生命周期要经历一下阶段:类级初始化资源处理,方法级初始化资源处理.执行测试用例中的方法.方法级销毁资源处理.类级销毁资源处理. 测试方法 @Test 初始化 ...

Android环境搭建要点

1.JDK环境变量配置 在环境变量的path变量中加入jdk安装目录的bin路径字符串(C:\Program Files\Java\jdk1.8.0\bin). 配置好后,在命令提示符界面输入&quo ...

PageControl(弹性滚动)

使用网上源码KYAnimatedPageControl     self.pageControl = [[KYAnimatedPageControl alloc]initWithFrame:CGRec ...

学习红帽企业版RHEL 6.4的两问

(1)看了一晚上的RHEL 6.4,到现在也没分清楚服务器版和桌面版.都说两个版本是一个文件,那装上之后怎么判断这到底用的是服务器版还是桌面版?还有人说在安装过程中会要求选择,用虚拟机安装根本没看到有 ...

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

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

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

  2. lisp语言画阿基米德线_孩子总说“我不会画”!那么孩子是否要先学画形象?...

    01 我们生活在一个具象的世界,一睁眼看到的都是一个个清晰可辨的客观具体形象. 因此,我们在画画时也都是本能地力求去还原和描述这个具体的形象. 从美术史的角度看,尽管经历千百年的发展演变,绘画最终呈现 ...

  3. 五、C语言创建桌面程序:画笔和画刷

    一.画笔画刷的概念 画笔和画刷都用来在画布上绘图.画布就是用来绘画的一块背景,可以有颜色,也可以没有,也可以有图案(比如条纹.网格等):画布可以理解为我们平时作图时使用的纸. 画笔用来画线,可以是封闭 ...

  4. C语言编程>第四周 ⑦ 用fillellipse画椭圆。

    例题:用fillellipse画椭圆. 代码如下: #include "stdio.h" #include <graphics.h> #include <coni ...

  5. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积

    /* 编写一个程序,从键盘读入一个矩形 的两个边的值(整数),求矩形面积. */ #include<stdio.h> void main() {int length,wide,area;p ...

  6. c语言将矩形分成多个小正方形,蓝桥杯练习算法题(矩形切割成正方形)

    书山有路勤为径,学海无涯苦作舟 点赞再看,养成习惯 目录 1.前言 2.题目 3.代码 3.前言: 最近在准备即将到来的蓝桥杯比赛,拼命刷题,锻炼解题的算法,俗话说熟能生巧,现在的是去做大量的题目,来 ...

  7. 用python画写轮眼代码,写轮眼c语言代码

    写轮眼怎么画 写轮眼的画法如下:工具/原料一把圆规.一块橡皮.一只自动笔(铅笔).一只红色彩色铅笔1.首先,我们用圆规画一个较小的圆.2.接着,再在这个圆里面画一个圆,注意:两个圆的距离.大小和位置要 ...

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

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

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

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

最新文章

  1. [SCOI2009]生日礼物
  2. 学者要研究真问题做真学问
  3. PostgreSQL将表导出为CSV(服务器端、客户机端)完整版
  4. tomcat启动停止在 Initializing Spring root WebApplicationContext,就不运行了
  5. java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用
  6. python 写文件 编码_Python文件写入时的编码问题解决
  7. 收下这份实操案例,还怕不会用Jmeter接口测试工具?!
  8. Thrift IDL使用方式
  9. java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】
  10. 工业物联网实施的6个常见误解
  11. 14Python爬虫---爬虫伪装浏览器
  12. element-ui 删除input框尾部默认图标和获取焦点边框高亮问题
  13. GroovyGrails
  14. 学习vue3组件事件时,思维发散(溜号)的感悟
  15. vue2实现京东商城
  16. pdf压缩文件怎么压缩最小,pdf大小超过上传大小不能上传怎么压缩?
  17. [BZOJ1616][Usaco2008 Mar]Cow Travelling游荡的奶牛(dfs||dp)
  18. 为什么墨刀的动效这么酷炫?学会神奇移动,你也可以
  19. opencv4.5.1 包含了BEBLID算子,一个新的局部特征描述符,超越ORB
  20. Unix.Trojan.DDoS_XOR-1、Linux.Trojan.Agent(Linux.BackDoor.Gates.5)木马清理

热门文章

  1. 进大厂要背八股文吗?这是我见过最好的回答
  2. 问渠那得清如许,唯有源头活水来
  3. 下载lpv9_v9社区APP下载-v9社区APP官方版 v1.0.4-114手机乐园
  4. django 查询 value 与 value_list 区别
  5. python 抢票代码 猫眼演出_python爬取猫眼票房的数据,遇到美团登录验证怎么办...
  6. 使用matlab深度学习工具箱实现CNN卷积神经网络训练仿真
  7. validationGroup和Page_ClientValidate()配合使用解决前端click事件返回为false时验证失效问题
  8. Windows mobile PPC 下利用 tmail.exe 发送短信、彩信、邮件
  9. 缺乏技术专利支撑的小米还能走多远
  10. 数据库 蚂蚁_蚂蚁集团把夺得世界第一数据库的 OceanBase 独立公司化