用鼠标画图

用鼠标在窗体中画线

(作者:张均洪)

我们先在同一命名空间中定义一个类和一个接口:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;

public interface Ishape
    {
        void Draw(Graphics g);
    }
    //这个类提供画线的方法
    [Serializable]
    public class Line : Ishape
    {
        Point startP, endP;
        public Line(Point sp, Point ep)
        {
            this.startP = sp;
            this.endP = ep;
        }
        public void Draw(Graphics g)
        {
            g.DrawLine(Pens.Black, startP, endP);
        }
    }

新建一个窗体:FORM1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Collections;

//定义窗体级公用变量

 //开始画线的起点坐标,此变量的值将在MOUSEDOWN事件中确定
        Point startPoint;
        //定义一个ARRAYLIST,用于存储对象
        private ArrayList shapes=new ArrayList();

 protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //GETENUMERATOR返回枚举数对象,这个对象为类
            IEnumerator shapeEnum = shapes.GetEnumerator();
            //WHILE是查找出合适的类,并利用其DRAW方法
           while (shapeEnum.MoveNext())
            {
                Ishape shape = (Ishape)shapeEnum.Current;
                //运用相关类的DRAW方法,
                //当我们前面定义多个方法时很有用,比例我们还可以加些
                //画矩形(DrawRectangle)画园(DrawEllipse)等
                //在这里我们只定义一个方法(画线)。

                shape.Draw(g);
               
            }
        }

 

 private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button ==System.Windows.Forms.MouseButtons.Left)
            {
                //鼠标按下确定起点的坐标,把这个变量赋于STARTPOINT值
                startPoint = new Point(e.X, e.Y);
            }
        }

 

 private void Form1_MouseUp(object sender, MouseEventArgs e)
        {                   
            Point endpp = new Point(e.X, e.Y);
            if (e.Button ==System.Windows.Forms.MouseButtons.Left)
            {
                //把LINE类添加到定义好的ARRARYLIST中,以便
                //ONPAINT事件处理。
                shapes.Add(new Line(startPoint, endpp));
            }
            //这句很关键,没有这句你无法看见你的画的线。
            //ONPAINT事件,是在窗体在激活,改变大小,加载,刷新的时候
            //才能进行,所以当我们的动作完成后,必须对窗体进行
            //刷新操作。
            this.Refresh();
          
        }

在新建窗体后注意把窗体背景设为白色喔!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值