窗体中仅包含一个pictrueBox1,先将代码付诸于下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Drawing2D;

namespace GDI_练习
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  public System.Windows.Forms.PictureBox pictureBox1;
  private Point p1 = Point.Empty, p2 = Point.Empty;
  private bool isMouseDown = false, isMouseUp = false;
 
  ArrayList addArray = new ArrayList();
  public struct SharpType
  {
   public string type;
   public Point p1, p2;
   public Color foreColor, backColor;
   public Brush brush;
   public SharpType( string type, Point p1, Point p2, Color foreColor, Color backColor, Brush brush )
   {
    this.type = type;
    this.p1 = p1;
    this.p2 = p2;
    this.foreColor = foreColor;
    this.backColor = backColor;
    this.brush = brush;
   }

}

/// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;

public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

//
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

/// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

#region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.pictureBox1 = new System.Windows.Forms.PictureBox();
   this.SuspendLayout();
   //
   // pictureBox1
   //
   this.pictureBox1.BackColor = System.Drawing.Color.White;
   this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
   this.pictureBox1.Location = new System.Drawing.Point(0, 0);
   this.pictureBox1.Name = "pictureBox1";
   this.pictureBox1.Size = new System.Drawing.Size(432, 397);
   this.pictureBox1.TabIndex = 0;
   this.pictureBox1.TabStop = false;
   this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
   this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
   this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
   this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(432, 397);
   this.Controls.Add(this.pictureBox1);
   this.Name = "Form1";
   this.Text = "Form1";
   this.ResumeLayout(false);

}
  #endregion

/// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   if( ! isMouseUp )
   {
    this.isMouseDown = true;
    this.p1 = new Point( e.X, e.Y );
   }
 
  }

private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   Graphics g = this.pictureBox1.CreateGraphics();
   if( isMouseDown && p2 != Point.Empty )
    g.DrawEllipse( Pens.White, p1.X, p1.Y, Math.Abs( p1.X - p2.X ), Math.Abs( p1.Y - p2.Y ) );

if( isMouseDown && ! isMouseUp )
   {
    p2 = new Point( e.X, e.Y );
    g.DrawEllipse( Pens.Black, p1.X, p1.Y, Math.Abs( p1.X - p2.X ), Math.Abs( p1.Y - p2.Y ) );

}
   foreach( SharpType type in addArray )
   {
    g.DrawEllipse( Pens.Black, type.p1.X, type.p1.Y, Math.Abs( type.p1.X -  type.p2.X ), Math.Abs( type.p1.Y - type.p2.Y ) );

}
   g.Dispose();
  }

private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   this.isMouseDown = false;
   p2 = new Point( e.X, e.Y );
   Graphics g = this.pictureBox1.CreateGraphics();
   g.DrawEllipse( Pens.Black, p1.X, p1.Y, Math.Abs( p1.X - p2.X ), Math.Abs( p1.Y - p2.Y ) );
   addArray.Add( new SharpType( "a", p1, p2, Color.Black, Color.Empty, Brushes.Black ) );
   p1 = Point.Empty;
   p2 = Point.Empty;
   g.Dispose();
 
  }

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
  {
   foreach( SharpType type in addArray )
   {
    e.Graphics.DrawEllipse( Pens.Black, type.p1.X, type.p1.Y, Math.Abs( type.p1.X -  type.p2.X ), Math.Abs( type.p1.Y - type.p2.Y ) );

}
  }

}
}

C#中用“橡皮条”法绘图和重绘相关推荐

  1. 孙鑫-MFC笔记六--绘图,重绘

    Windows颜色对话框功能的添加: MFC提供了CColorDialog类,方便创建颜色对话框. CColorDialog dlg: dlg.DoModal(); 默认为黑色.即首参为值为0. 保存 ...

  2. Phone重绘机制drawRect 转

    Phone重绘机制drawRect 如何使用iPhone进行绘图.重绘操作 iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个 ...

  3. c#中控件重绘(放大缩小移动隐藏恢复后不消失)实例

    //很重要,一定要重写并在在OnPaint()中用传入的pevent.Graphics重绘,并且屏蔽掉父类的OnPaint方法,这样重绘后的图形不论控件怎么操作都不会消失了 using System; ...

  4. iPhone重绘机制drawRect

    iPhone重绘机制drawRect 如何使用iPhone进行绘图.重绘操作 iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一 ...

  5. java使用重绘实现拖动_原生JS使用Canvas实现拖拽式绘图功能

    一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包含圆心坐标点和半径)等实体 2.原生JavaScript实现,不依赖任何第三方j ...

  6. 双缓冲法解决重绘和闪屏问题

    重绘导致原因:UpdateData.Invalidate.InvalidateRect和UpdateWindow函数. 1. UpdateData重绘控件函数 UpdateData(TRUE)--刷新 ...

  7. ui九宫格切图_【九宫切图】什么是九宫绘图,九宫格绘法

    九宫切图在控件美化的时候会经常的用到 比如: 20140630220626_56850.png (3.13 KB, 下载次数: 42) [九宫切图]什么是九宫绘图,九宫格绘法 2014-7-21 11 ...

  8. android view交替动画,Android View原理(View树遍历,View重绘,View动画)

    一.屏幕绘图基础 Android中的GUI系统是客户端和服务端配合的窗口系统,即后台运行了一个绘制服务,每个应用程序都是该服务端的一个客户端,当客户端需要绘制时,首先请求服务端创建一个窗口,然后在窗口 ...

  9. java画笔覆盖在界面_Java实现画图程序和重绘

    上次聊了一下事件监听机制,今天就来聊一下怎么实现一个画图程序并且实现重绘. 一.实现画图程序 1.实现一个画图程序所需的API类? JFrame窗体容器组件类 JPanel 面板元素组件类 JButt ...

最新文章

  1. 兴义网站服务器存储,兴义ipfs分布式存储操作系统
  2. Postfix无法正常发送邮件故障的排除
  3. java 串口波特率_JAVA串口通信的方法
  4. 开机后能解锁吗_黔隆科技刷机教程360奇酷Q5PLUS(1509A00)忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  5. 利用django中间件CsrfViewMiddleware防止csrf攻击
  6. [导入]ASP.NET MVC的WebSite模式(with mvc membership)
  7. 将10个成绩排序java程序_快速排序——成绩排序
  8. asp php 一句话,ASP_asp一句话木马原理分析,通过HTTP协议来访问 一句话木 - phpStudy...
  9. centos7搭建bugzilla
  10. 优锘:发布一站式数字孪生平台森工厂,打造数字孪生领域的office
  11. 浅谈某定设计网站非会员去除水印
  12. laydate时间控件在谷歌浏览器中兼容性问题
  13. js replace使用方法
  14. 想要了解大厂PM吗,来看看这几款软件
  15. rx580显卡运行不了Linux,RX580吃鸡不流畅原因找到了 真相令人无语
  16. java新特性--03--Stream简介
  17. Unity3D游戏开发之[三国杀传奇]单月双平台流水近5000万
  18. 13树莓派手动安装Home Assistant
  19. CSDN个人信息声明
  20. 突发!阿里组织架构大调整

热门文章

  1. linux摄像头教程,linux 摄像头驱动编写方法教程
  2. 浙江远程c语言答案,北语远程0609计算机 C语言 大学英语2 数字电路 答案
  3. mysql查询char和int哪个快_MySQL中int、char以及varchar的性能对比
  4. 12.16库的相关知识与补充
  5. DIV布局——粉色的鲜花礼品电商(4页) HTML+CSS+JavaScript 学生网上商城网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  6. JavaScript递归(空瓶子换酒)
  7. HTML简洁大气带进度条的URL跳转页面源码
  8. 工作中常用的免费API,赶紧收藏起来~
  9. Coursera课程自然语言处理(NLP)笔记整理(六) (第四周课程)
  10. 如何安装 wxPython 开始 python GUI 编程