• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#GDI在控件上绘图

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

本文以以在chart控件上和窗体上画矩形为例子

 不多解释了,代码很简单。

还有一些童鞋要别的源码,给我发邮箱吧

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;
using System.IO;
using System.Configuration;

namespace WFApp2
{
    public partial class data : Form
    {
        public data()
        {
            InitializeComponent();
            //窗体
            g = this.CreateGraphics();
            //chart控件
            g2 = this.chart1.CreateGraphics();
        }

            
     
        public Point firstPoint = new Point(0, 0);  //鼠标第一点 
        public Point secondPoint = new Point(0, 0);  //鼠标第二点 
        public bool begin = false;   //是否开始画矩形 
        /// <summary>
        /// 在from上画矩形
        /// </summary>
        Graphics g;

        /// <summary>
        /// 在chart1控件上画矩形
        /// </summary>
        Graphics g2;

        /// <summary>
        /// 在窗体上按下鼠标事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void data_MouseDown(object sender, MouseEventArgs e)
        {
            begin = true;
            firstPoint = new Point(e.X, e.Y);
        }

        /// <summary>
        /// 在窗体上鼠标移动开始绘图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void data_MouseMove(object sender, MouseEventArgs e)
        {
            if (begin)
            {
                //清除窗体绘图面,相当于刷新了一次窗体界面然后重新绘制
                g.Clear(this.BackColor);
                //获取新的右下角坐标 
                secondPoint = new Point(e.X, e.Y);
                //获取两个数中的大者或小者
                int minX = Math.Min(firstPoint.X, secondPoint.X);
                int minY = Math.Min(firstPoint.Y, secondPoint.Y);
                int maxX = Math.Max(firstPoint.X, secondPoint.X);
                int maxY = Math.Max(firstPoint.Y, secondPoint.Y);

                //画框 
                g.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY);
                //ControlPaint.DrawReversibleFrame(new Rectangle(minX, minY, maxX - minX, maxY - minY),this.BackColor,FrameStyle.Dashed);

            }
        }

        /// <summary>
        /// 鼠标松开停止绘图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void data_MouseUp(object sender, MouseEventArgs e)
        {
            begin = false;
        }

        /// <summary>
        /// 在chart控件上移动鼠标绘图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseMove(object sender, MouseEventArgs e)
        {
            if (begin)
            {
                //重新在chart上面绘图,此处不能用clear方法,clear会清除整个绘图界面chart控件会被清除
                this.Refresh();
                //获取新的右下角坐标 
                secondPoint = new Point(e.X, e.Y);
                int minX = Math.Min(firstPoint.X, secondPoint.X);
                int minY = Math.Min(firstPoint.Y, secondPoint.Y);
                int maxX = Math.Max(firstPoint.X, secondPoint.X);
                int maxY = Math.Max(firstPoint.Y, secondPoint.Y);

                //画矩形
                g2.DrawRectangle(new Pen(Color.Red), minX, minY, maxX - minX, maxY - minY);

            }
        }

        /// <summary>
        /// 鼠标松开停止绘图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseUp(object sender, MouseEventArgs e)
        {
            begin = false;
        }

        /// <summary>
        /// 在chart控件上按下鼠标
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseDown(object sender, MouseEventArgs e)
        {
            begin = true;
            firstPoint = new Point(e.X, e.Y);
        }

        

    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#生成不重复随机数发布时间:2022-07-10
下一篇:
C# Socket与实现发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap