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# 动态绘制直线和曲线的更多相关文章

  1. iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆

    #import "DrawView.h" @implementation DrawView /** * 作用:专门用来绘图 * 什么时候调用:当View显示的时候调用 * @par ...

  2. CAD交互绘制直线(网页版)

    用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...

  3. CAD交互绘制直线(com接口)

    用户可以在控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE dY ...

  4. Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形

    来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...

  5. TWaver3D直线、曲线、曲面的绘制

    插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣 基 ...

  6. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  7. iOS可视化动态绘制连通图(Swift版)

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  8. 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~

    原文:通通玩blend美工(8)--动态绘制路径动画,画出个萌妹子~ 2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的Loading动画呢? 刚经历了某甲方高强度一个月的洗 ...

  9. canvas教程(二) 绘制直线

    经过 canvas 教程(一) 简介 我们知道了 canvas 的一些基本情况 而本次是给大家带来直线的绘制 canvas 中,基本图形有两种,一种是直线,还有一种是曲线 但是无论是直线还是曲线,我们 ...

随机推荐

  1. append、appendTo、prepend、prependTo、before、insertBefore、after、insertAfter、replaceAll方法被调用后,原本在页面上显示的元素会消失

    详细描述: $ele.append..appendTo..prepend..prependTo..before..insertBefore..after..insertAfter..replaceAl ...

  2. 基于socket实现http请求

    异步非阻塞模块原理 # 基于socket实现http请求 import socket # 多路IO复用模块 import select socket_list= [] url_list = [&quo ...

  3. java 常见语法,但是发现switch等基础,常见面试套路不会了,待补充

    1,面向对象,万物皆对象,面向对象的三个基本特性:封 装,继承,多态. 面向对象的程序都是由类组成,类封装了对象的属性和行为. 封装:隐藏对象的属性和实现细节,仅对外提供接口. 继承:实现代码复用,将 ...

  4. linux是什么,有什么特点

    (1)Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持 ...

  5. python安装pyMysql

    python2和python3是不兼容的,在python2中,链接数据库使用的是mysqldb,但在python3中是是pyMysql. 1.首先dos进入python安装目录,找到并进入Script ...

  6. LL(1),LR(0),SLR(1),LR(1),LALR(1)的 联系与区别

    一:LR(0),SLR(1),规范LR(1),LALR(1)的关系     首先LL(1)分析法是自上而下的分析法.LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法.       ...

  7. Charles设置HTTPS抓包

    1. 配置 Charles 根证书 点击 Help -> SSL Proxying -> Install Charles Root Certificate 之后会弹出钥匙串,如果不弹出,请 ...

  8. [Leetcode 134]汽车加油站 Gas Station (环形)

    [题目] There are N gas stations along a circular route, where the amount of gas at station i is gas[i] ...

  9. 扯淡设计模式2:java,模板模式,

    模板模式: package com.dayuanit.service; public abstract class UserService { public void login(String use ...

  10. css样式问题解决

    1.关于滚动条 (1)布局后由于写了 overflow-y: scroll; 在内容还没有超出就出现了滚动条. 我的解决方法是直接去掉了滚动条: .class::-webkit-scrollbar { ...