c# 动态绘制直线和曲线
c# 动态绘制直线和曲线
在本案例中利用Graphics对象动态地绘制直线和曲线。程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以绘制曲线。
制作要点:
1.Graphics对象的应用。
2.窗体的MouseUp事件和MouseDown事件的应用。
3.窗体的MouseMove事件的应用。
4.Graphics对象的DrawLine()方法的应用。
该方法可以绘制一条线条,其语法结构如下:
public void DrawLine(System.Drawing.Pen pen,float x1,float y1,float x2,float y2)
各参数意义如下:
1).pen:System.Drawing.Pen,他确定线条的颜色、宽度和样式。
2).x1:第一个点的x坐标。
3).y1:第一个点的y坐标。
4).x2:第二个点的x坐标。
5).y2:第二个点的y坐标。
5.Graphics对象的DrawRectangle()方法的应用。
该方法可以绘制由坐标对、宽度和高度指定的矩形,其语法结构如下:
public void DrawRectangle(System.Drawing.Pen pen,float x,float y,float width,float height)
各参数意义如下:
1)pen: System.Drawing.Pen,它确定矩形的颜色、宽度和样式。
2)x:要绘制的矩形的左上角的x坐标。
3)y:要绘制的矩形的左上角的y坐标。
4)width:要绘制的矩形的宽度。
5)height:要绘制的矩形的高度。
制作步骤:
1.新建一个Windows窗体应用程序,设置"Text"属性为“动态绘制直线和曲线”。
2.添加一个GroupBox控件。设置'Text"属性为“请选择绘图类型”。
3.添加2个RadioButton控件,设置"Text"属性分别为“直线”和“曲线”。
4.添加2个按钮。设置其"Text"属性为“清空”和“退出”。
添加代码:
1.双击窗体。定义公共变量。
int startX; //获取鼠标起始点的X坐标
int startY; //获取鼠标起始点的Y坐标
Graphics g; //定义Graphics对象实例
2.双击窗体,添加:
private void Form1_Load(object sender, EventArgs e)
{
this.StartPosition = FormStartPosition.CenterScreen;
this.BackColor = Color.Snow; //设置窗体背景颜色
}
3.分别选择选择窗体事件中的“MouseUp”、"MouseDown"、"MouseMove"事件。添加如下代码:
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
g = this.CreateGraphics(); //创建Graphics对象实例
Pen p = new Pen(Color.Red,4); //设置画笔颜色和宽度
if (radioButton1.Checked == true)
{
g.DrawLine(p, startX, startY, e.X, e.Y); //绘制直线
}
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
startX = e.X; //为变量赋值
startY = e.Y;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
g = this.CreateGraphics();
Pen p = new Pen(Color.Blue,2); //设置画笔颜色和宽度
if (radioButton2.Checked == true)
{
g.DrawRectangle(p,e.X,e.Y,1,1); //绘制曲线
}
}
4.分别双击“清空”和“退出”按钮,添加:
private void button1_Click(object sender, EventArgs e)
{
g = this.CreateGraphics();
g.Clear(Color.Snow); //清空窗体背景
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
c# 动态绘制直线和曲线的更多相关文章
- iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆
#import "DrawView.h" @implementation DrawView /** * 作用:专门用来绘图 * 什么时候调用:当View显示的时候调用 * @par ...
- CAD交互绘制直线(网页版)
用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...
- CAD交互绘制直线(com接口)
用户可以在控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE dY ...
- Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形
来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...
- TWaver3D直线、曲线、曲面的绘制
插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣 基 ...
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- iOS可视化动态绘制连通图(Swift版)
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
原文:通通玩blend美工(8)--动态绘制路径动画,画出个萌妹子~ 2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的Loading动画呢? 刚经历了某甲方高强度一个月的洗 ...
- canvas教程(二) 绘制直线
经过 canvas 教程(一) 简介 我们知道了 canvas 的一些基本情况 而本次是给大家带来直线的绘制 canvas 中,基本图形有两种,一种是直线,还有一种是曲线 但是无论是直线还是曲线,我们 ...
随机推荐
- Strut2页面传参跳转 --Struts2
1.本案例借助struts2框架,完成页面传参.跳转功能 2.代码实现 index.jsp: <form action="helloStruts2.action" metho ...
- Http头:Expires,Cache-Control,Last-Modified,ETag
Expires:过期时间 el:Expirse:Fri,30 Oct 1998 14:19:41 Cache-Control:缓存控制 el:Cache-Contro ...
- C++句柄解析
C++句柄类解析 引题:在C++中,对于运行时类型识别问题.在程序中使用引用或者指针在运行时动态识别对象类型.然而使用指针或者引用却增加了用户负担(在继承体系中,没有明确的基类到派生类的转换,必须用户 ...
- 手机端网页技术--使自己做的asp.net网页适应手机浏览
使自己做的asp.net网页适应手机浏览 特别提醒: 对于文本框和其他控件,无法自适应,只有纯粹的文本和table的单元格可以自适应,其他的只有设置为具体的宽度,或者在一个表格中(本来在电脑中显示一行 ...
- erlang大法好
可惜haxe不能生成erlang.不过没关系,s6k输入法的实际执行方案,现在由typescript改用haxe.cdt3的ts地位不变. 以后这个博客大部分内容都是跟haxe/typescript相 ...
- Mysql服务配置优化
mysql服务器优化包含 硬件优化.操作系统配置优化(cpu调度.网络.内存.虚拟内存.磁盘io).Mysql服务配置优化(最大连接数.表缓存等.存储引擎).表结构优化.索引优化 总共5个方面. 本片 ...
- .net core Kestrel宿主服务器自定义监听端口配置
在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...
- 两小时内sql
select convert(datetime,convert(char(20),dateadd(hour,-2,getdate())))
- format格式化和函数
{[name][:][[fill]align][sign][#][0][width][,][.precision][type]}用{ }包裹name命名传递给format以命名=值 写法, 非字典映射 ...
- ActiveMQ使用介绍及实例
上一篇讲了rabbitmq的使用以及demo,activemq的思路也与之有相似的地方. activemq是基于Java实现的.activemq没有rabbitmq那么多的路由规则,其通信方式只有两种 ...