`
luozhong915127
  • 浏览: 189180 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

C#画板画板实现与问题的解决

阅读更多

 C#项目的解析 

     C#语言继承了CC++语言的特性,并且与java有紧密的联系。C#语言和.NET框架协调工作,一起构建了一个高度优雅的编程环境。可以说C#的核心是面向对象程序设计(opp);

    好吧,我说这么多,就进入软件的操作,呵呵。首先要注意的问题是,Mainm要大些,代码如下:static void  Main()。在命令口编写,应该start/Visual Studio 2005/Visual Studio Tools/Visual Stdio 2005 Command  Prompt,    你就可以在命令口操作了,呵呵,这是高手来的地方哟!嗯,我能发现这个地方我也是高手的高手哟!代码如下:\>csc  Example.cs.

    现在我讲一下我的画板的重绘是怎样实现的,首先,你要清楚重绘在C#的方法是什么,则是onPaint(object senderPaintEventArgs  e),这个方法是重写Froms的方法,而这个界面类继承了它,格式这样的From1Froms,在这里我讲一下抽象类的用方法,因为下面我要用直线类去实现抽象类,我遇到一个问题,嗯,就是我去是实现这个抽象类时,就是要重写抽象类的方法,在voidoverride,可是提示如不加override,否则加new,但是运行报错说“你级别不高”经过一番的查找,终于找到了问题,那就是你的抽象类的方法中的abstract改为Virtual方法。即可。

 

如果是抽象类的方法时候
public override void draw();
 如果是虚拟类的方法时候
public new void draw();

 

 

 

     每一次画的你要你要保存下来,在这里我使用的是List,没有使用ArrayListList是一个接口,是Collection接口的一个子接口。是一个有序的集合。而ArrayListList的一个实现类,可以实现数组大小的可变,可以很方便的进行增加和删减数组内元素的操作。 List list=new ArrayList();这种形式成为向上转型,ArrayList实现了List接口,可以看成是从List继承而来,一个子类的对象可以指向它父类。比如,狗从动物继承而来,狗是一只动物,所以狗的对象可以当作一只普通的动物来看待。肯定你要使用泛类才能保存。把你要的颜色和点和paint等等一些属性封装起来。 在C#画曲线,没有想java里有MoseDrag方法,可是有一个MouseMove这个方法。代码如下:

 

 From1.cs类

C#代码  
<P><SPAN style="FONT-SIZE: 14pt"><DIV class=Section0>   
<PRE class=c# name="code">using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Linq;   
using System.Text;   
using System.Windows.Forms;   
  
  
namespace WindowsFormsApplication1   
{   
    public partial class Form1 : Form   
    {   
         //定义坐标
        int x1, y1, x2, y2,x3,y3;   
         //定义画布
         Graphics g; 
        // 创建画笔 
        Pen paint = new Pen(Color.Red, 3); 
        // 定义按钮名字 
        String name;  
        // 创建保存形状集合
      List<NetShape> shapes = new List<NetShape>();  
      //新建形状对象
        NetShape shape;   
        public Form1()   
        {   
            InitializeComponent();  
            //获得画布 
            g = this.panel1.CreateGraphics();  
            // 给panel加画笔监听
            this.panel1.Paint += new PaintEventHandle(this.OnPaint);   
             // // 给panel加鼠标监听
            this.panel1.MouseMove += new MouseEventHandler

(this.F_MouseMove);   
        }   

        private void Form1_Load(object sender, EventArgs e)   
        {   
        }   
  
  
        private void button2_Click(object sender, EventArgs e)   
        {   
            //获得按钮的字符串
            name = ((Button)sender).Name;   
             
        }   
          
        public void Form1_MouseDown(object sender, MouseEventArgs 

e)   
        {   
             //得到坐标   
            x1 = e.X;   
            y1 = e.Y;   
  
        }   
  
        public void F_MouseMove(object sender, MouseEventArgs e)   
        {   
             //判断是否按钮符合
            if (name.Equals("button1")) {   
                x3 = e.X;   
                y3 = e.Y; 
                 // 用包装好的类画直线 
                shape = new ImpLine(paint, x1, y1, x3, y3);   
                shape.draw(g);  
                // 添加到集合
                shapes.Add(shape);   
                x1 = x3;   
                y1 = y3;    
            }          
        }   
  
        public void Form1_MouseUp(object sender, MouseEventArgs e) 

  
        {   
            x2 = e.X;   
            y2 = e.Y;   
            if (name.Equals("button2"))   
            {   
  
                shape = new ImpLine(paint, x1, y1, x2, y2);   
                 
            }   
            shape.draw(g);   
            shapes.Add(shape);   
        }   
         /*
           *重绘
           *
         */
        public void OnPaint(object sender, PaintEventArgs e)   
        {   
            //遍历集合的形状
            for(int i=0;i < shapes.Count;i++)   
            {   
                NetShape shape = shapes.ElementAt<NetShape>(i);   
                shape.draw(g);   
  
            }   
        }   
  
          
          
    }   
}   
  
  
</PRE>   
</DIV>   
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt">  直线

类</P>   
<DIV class=Section0>   
<PRE class=c# name="code">using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Text;   
using System.Drawing;   
  
  
namespace WindowsFormsApplication1   
{   
    public class ImpLine:NetShape   
{   
        int x1, y1, x2, y2;   
        Pen paint;   
        public ImpLine(Pen paint,int x1, int y1, int x2, int y2)   
        {   
            this.x1 = x1;   
            this.x2 = x2;   
            this.y1 = y1;   
            this.y2 = y2;   
            this.paint = paint;   
        }   
        public override void draw(Graphics g)   
        {   
            g.DrawLine( paint,x1, y1, x2, y2);   
  
        }   
  
  
    }   
}   
</PRE>   
</DIV>   
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"> </P>  

 
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"> </P>  

 
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt">形状

类</P>   
<P class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"> </P>  

 
  
<DIV class=Section0>   
<PRE class=c# name="code">using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Text;   
using System.Drawing;   
  
namespace WindowsFormsApplication1   
{   
     public abstract class NetShape   
    {   
  
        public abstract void draw(Graphics g);   
  
    }   
}   
</PRE>   
</DIV>   
</SPAN>   
<P></P><DIV class=Section0>   
<PRE class=c# name="code"></PRE>   
</DIV>   
   


C#代码  

using System;   
using System.Collections.Generic;  
 using System.ComponentModel;   
using System.Data;   using 

System.Drawing;   
using System.Linq;   
using System.Text;  
using System.Windows.Forms;       
namespace WindowsFormsApplication1  
 {       
public partial class Form1 : Form {          
      int x1, y1, x2, y2,x3,y3;            
     Graphics g;          
     Pen  paint = new Pen(Color.Red, 3);          
    String name;         

    List<NetShape> shapes = new List<NetShape>();                       

   NetShape shape;           
      public Form1()  {               

            InitializeComponent();            
          g = this.panel1.CreateGraphics();     

          this.panel1.Paint += new PaintEventHandler(this.OnPaint);      

         this.panel1.MouseMove += new MouseEventHandle(this.F_MouseMove);         
         }                  
        private void Form1_Load(object sender, EventArgs e) {       
        }              
     private void  button2_Click(object sender, EventArgs e)  {             
       name = ((Button)sender).Name;                     
      }                    
    public  void   Form1_MouseDown(object sender, MouseEventArgs e) {          

                    x1 = e.X;               
                   y1 = e.Y;             
     }             
     public   void F_MouseMove(object sender, MouseEventArgs e)           {           

                 if (name.Equals("button1")) {                  
                        x3 = e.X;                   

                        y3 = e.Y;                   
                        shape = new ImpLine(paint, x1, y1, x3, y3);      

                        shape.draw(g);                   
                        shapes.Add(shape);                   

                        x1 = x3;                                 
                       y1 = y3;                  
               }                                         

          }             
            public void Form1_MouseUp(object sender, MouseEventArgs e) {               
                      x2 = e.X;              
                     y2 = e.Y;       

                  if (name.Equals("button2")) {                     
                         shape = new ImpLine(paint, x1, y1, x2, y2);                                }               

                         shape.draw(g);             
                         shapes.Add(shape);                             }       

        public void OnPaint(object sender, PaintEventArgs e) {                      
                          for(int i=0;i < shapes.Count;i++) {                   
                             NetShape shape = shapes.ElementAt<NetShape>(i);                   
                            shape.draw(g);             

                             }          
         }                             
      }  
 }  


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int x1, y1, x2, y2,x3,y3;
         Graphics g;
        Pen paint = new Pen(Color.Red, 3);
        String name;
      List<NetShape> shapes = new List<NetShape>();

       
        NetShape shape;
        public Form1()
        {
            InitializeComponent();
            g = this.panel1.CreateGraphics();
            this.panel1.Paint += new PaintEventHandler(this.OnPaint);
          
            this.panel1.MouseMove += new MouseEventHandler

(this.F_MouseMove);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }


        private void button2_Click(object sender, EventArgs e)
        {
            name = ((Button)sender).Name;
          
        }
       
        public void Form1_MouseDown(object sender, MouseEventArgs 

e)
        {
            
            x1 = e.X;
            y1 = e.Y;

        }

        public void F_MouseMove(object sender, MouseEventArgs e)
        {

            if (name.Equals("button1")) {
                x3 = e.X;
                y3 = e.Y;
                shape = new ImpLine(paint, x1, y1, x3, y3);
                shape.draw(g);
                shapes.Add(shape);
                x1 = x3;
                y1 = y3;
            }  
        }

        public void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            x2 = e.X;
            y2 = e.Y;
            if (name.Equals("button2"))
            {

                shape = new ImpLine(paint, x1, y1, x2, y2);
              
            }
            shape.draw(g);
            shapes.Add(shape);
           


        }
        
        


        
        public void OnPaint(object sender, PaintEventArgs e)
        {
     
            for(int i=0;i < shapes.Count;i++)
            {
                NetShape shape = shapes.ElementAt<NetShape>(i);
                shape.draw(g);

            }
        }

       
       
    }
}




  直线类

C#代码  using System;   using System.Collections.Generic;   using 

System.Linq;   using System.Text;   using System.Drawing;       

namespace WindowsFormsApplication1   {       
public  class  ImpLine:NetShape   {           
               int x1, y1, x2, y2;           
               Pen paint;         

      public ImpLine(Pen paint,int x1, int y1, int x2, int y2) {          

                this.x1 = x1; 
               this.x2 = x2;
               this.y1 = y1;            

               this.y2 = y2; 
              this.paint = paint;          
       }           
        public   override void draw(Graphics g) {                                     g.DrawLine( paint,x1, y1, x2, y2);            
      } 
    }  
 } 

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;


namespace WindowsFormsApplication1
{
    public class ImpLine:NetShape
{
        int x1, y1, x2, y2;
        Pen paint;
        public ImpLine(Pen paint,int x1, int y1, int x2, int y2)
        {
            this.x1 = x1;
            this.x2 = x2;
            this.y1 = y1;
            this.y2 = y2;
            this.paint = paint;
        }
        public override void draw(Graphics g)
        {
            g.DrawLine( paint,x1, y1, x2, y2);

        }


    }
}


 
 
形状类
 


C#代码  using System;  
 using System.Collections.Generic;  
 using  System.Linq;   
 using System.Text;   
using System.Drawing;     

namespace WindowsFormsApplication1   {      
  public abstract class NetShape {           
       public abstract   void draw(Graphics g);         
   } 

 }  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace WindowsFormsApplication1
{
     public abstract class NetShape
    {

        public abstract void draw(Graphics g);

    }
}

 

1
2
分享到:
评论
3 楼 JuliaAilse 2012-03-02  
  提个建议哈!你完全可以拆分为两个或多个博客写啊!可以用写小标题,会显的很有条理。这样太长了,看的我晕晕的。
2 楼 pywepe 2012-02-27  
这是什么东西? 这么长
1 楼 luliangy 2012-02-27  
顶!

相关推荐

    C# GDI简单画板的实现

    在本文中,我们将深入探讨如何使用C#和GDI+(Graphics Device Interface)来实现一个简单的画板应用程序。GDI+是.NET Framework中用于图形绘制的基础组件,它提供了丰富的功能,使得开发者可以创建出交互式的可视化...

    c# 画板功能(可缩放拖动)

    在C#编程环境中,开发一个具备画板功能的应用程序是一项挑战性的任务,特别是要实现图片的导入、绘制、缩放和拖动等交互操作。在本文中,我们将深入探讨如何利用C#实现这样的功能,以及如何处理可能遇到的Bug。 ...

    C#做的画板

    总结来说,这个C#画板项目是一个基于Windows平台的绘画应用,利用C#语言和.NET框架实现,提供了多种绘画功能,但缺少选区工具。对于想要深入了解或改进这个项目的人员,需要熟悉C#编程、图形界面设计以及可能的WPF或...

    c#简单画板程序

    在C#编程环境中,开发一个简单的画板程序可以是一个很好的学习项目,它涉及到图形用户界面(GUI)的设计、事件处理以及基本的绘图操作。...同时,这也是一个很好的练习,可以提升问题解决和软件工程能力。

    C# winform 画板

    这个“C# winform 画板”项目显然旨在教授如何利用C#语言和Windows Forms框架来实现一个基本的绘图应用程序。让我们详细探讨一下这个项目中的关键知识点。 首先,`WinForm`是.NET Framework提供的一个用于构建桌面...

    C#小画板源码.zip

    【C#小画板源码】是一个基于C#编程语言实现的简易图形绘制应用程序。它为用户提供了一个基本的画布,可以在此上进行简单的绘画操作,例如绘制线条、形状、填充颜色等。这个项目对于初学者理解C#图形用户界面(GUI)...

    用C# 制作的一个小画板

    标题 "用C#制作的一个小画板" 描述了一个基于C#编程语言开发的简易画板应用程序。这个程序允许用户进行基本的绘画操作,如选择不同的颜色、调整字体大小以及改变画笔粗细,同时也支持使用鼠标进行文字书写。通过这些...

    C#版的画板程序

    本项目“C#版的画板程序”显然是一个利用C#语言实现的图形用户界面(GUI)应用,它允许用户进行基本的绘图操作,如同我们在传统的纸上画画一样。下面我们将详细讨论C#编程中的关键知识点以及如何在C#中创建一个简单...

    c# 画图 画板 工具 实现多种算法

    在C#中,通过比较错误值来决定下一步应该向哪个像素移动,以尽可能接近实际线段。 4. 中点画圆算法: 中点画圆算法是计算机图形学中的经典算法,它以圆心为中心,通过迭代计算出每个像素点是否应该被绘制。在C#中,...

    C#编写的绘画板

    标题中的"C#编写的绘画板"指的是一个使用C#编程语言开发的图形用户界面应用程序,它的主要功能是提供一个类似于真实绘画板的交互体验。在这样的应用中,用户可以通过鼠标或触控设备进行绘画,创建各种图形,如圆形、...

    c#实用画板小程序实例

    【C#实用画板小程序实例】是一个基于C#编程语言开发的交互式图形应用程序,它提供了丰富的绘图功能,让用户可以轻松地在屏幕上绘制各种图形。这个程序的主要目标是为用户提供一个简易的画布,通过鼠标操作来实现基本...

    C# 2010 简易画板

    开发者可以通过`Graphics`类实例与GDI+交互,利用其方法如`DrawLine`、`DrawRectangle`、`FillEllipse`等来实现画板的各种功能。 此外,为了实现撤销/重做功能,开发者可能会使用堆栈数据结构来存储每次绘制操作的...

    C# 简易画板代码

    【C#简易画板代码】是一个使用C#编程语言实现的简单绘图应用程序,它提供了基本的绘画功能,包括新建画布、保存作品、选取颜色以及调整画笔大小。此外,用户还可以绘制多种图形,如直线、曲线、矩形、圆形等。这个...

    C#简单画板

    【C#简单画板】是一个基于C#编程语言开发的简易绘图应用程序,它提供了基本的绘画功能,如画笔绘制、直线绘制以及颜色选择,适用于Windows 7操作系统,并采用了Ribbon界面设计。这个项目是学习C# GUI编程和图形用户...

    C# GDI+画板实验报告

    【C# GDI+画板实验报告】是一个关于使用C#编程语言和GDI+图形设备接口实现简单画图程序的实验项目。该实验旨在帮助学生熟悉Graphics类的使用,掌握创建画板框架的方法,并提升将理论知识应用于实践的编程能力。 在...

    C#326-画板工具,源代码

    在本项目"C#326-画板工具,源代码"中,我们主要探讨的是如何使用C#编程语言开发一个基本的画板应用程序。这个工具可能包含了一系列绘画和图形编辑功能,供用户进行创意表达或者进行简单的图形设计。C#是微软推出的一...

    C# 画画板 仿window画画板

    "C# 画画板 仿window画画板"项目是一个利用C#语言构建的简单画板应用,旨在模仿Windows操作系统内建的画图工具。这个项目对于初学者来说是一个很好的实践平台,它可以帮助开发者了解图形用户界面(GUI)的设计,以及...

    c#简易画板

    在本项目中,“c#简易画板”是一个利用C#编程语言开发的简单绘图应用程序。这个程序的主要目的是提供一个基础的平台,让用户能够进行基本的绘画操作,如绘制直线、矩形等基本图形。下面将详细介绍这个项目涉及到的C#...

    C#简易画板

    【C#简易画板】是基于C#编程语言和GDI+图形库开发的一个简单绘画应用程序。这个项目展示了如何利用GDI+的功能来创建一个基本的用户界面,允许用户进行自由绘图。GDI(Graphics Device Interface)是Windows操作系统...

    c#制作画板

    总结起来,创建一个C#画板应用程序涉及了UI设计、图形绘制、用户交互、文件操作等多个方面。通过学习和实践,不仅可以加深对C#语言的理解,还能提升图形界面编程的能力。在开发过程中,不断调试和完善,最终可以构建...

Global site tag (gtag.js) - Google Analytics