基于GDI+可伸缩滑动屏幕的XY轴的不同颜色风羽图的绘制

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Windows.Forms.AxHost;
using System.Windows.Forms;
using System.Runtime.CompilerServices;

namespace Suofang
{
    public class XY
    {
        public static void DrawXYLine(Panel panel)
        { 
            string[] height26 = new String[]//定义Y轴刻度
            {"(m)","300","280","260","250","240","230","220","210","200","190","180",
            "170","160","150","140","130","120","110","100","90","80","70","60","45","0"};
            Graphics g = Form1.form1.panel.CreateGraphics();
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置绘画质量为高质量
            g.DrawLine(Pens.Black, 30, panel.Height -50, panel.Width, panel.Height-50);// 绘制X轴 
            g.DrawLine(Pens.Black, 30, panel.Height - 50,30,0);// 绘制Y轴
            float interval = 30 * (Form1.form1.scale); // 刻度间隔根据缩放比例调整
            float Yzhou = 0;//Y轴刻度线起始
            float Xzhou = interval;//X轴刻度线起始
            int fen = 54;//设置分
            int miao = 44;//设置秒
            string timer = null;//时间的设置
            for (float x = interval; x<panel.Width; x += interval)//绘制X轴刻度线
            {
                g.DrawLine(Pens.Black, x+30, panel.Height -55, x+30, panel.Height -50);
            }
            for (float y = interval; y<panel.Height; y += interval)//绘制Y轴刻度线
            {
                g.DrawLine(Pens.Black, 30, panel.Height - y-50, 35, panel.Height - y-50);
            }
            for (int i = 25; i >= 0; i--)
            {
            g.DrawString(height26[i], new Font("宋体", 8f), Brushes.Black, 0, panel.Height - Yzhou - 50);//Y轴刻度信息的编写
            Yzhou += interval;
            }
            for (float i = 0; i <= (panel.Width - 50) / interval; i++)//X轴时间信息的编写
            {
            if (miao < 60)
            {
            miao += 2;
            }
            else
            {
            miao = 0;
            fen += 1;
            }
            if (i == 0)
            {
            timer = ("0");
            }
            else
            {
            timer = (Convert.ToString(fen) + ":" + Convert.ToString(miao));
            }
            g.TranslateTransform(Xzhou + 2, panel.Height - 40);//偏移旋转X轴文字
            Xzhou += interval;//增加刻度
            g.RotateTransform(60);//偏转60°
            g.TranslateTransform(-Xzhou - 2, -panel.Height + 40);
            g.DrawString(timer, new Font("黑体", 9f), Brushes.Black, new PointF(Xzhou, panel.Height - 40));//绘制X轴信息
            g.ResetTransform();

            }
        }
    }
}

这是XY轴及刻度线的绘制。

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.AxHost;

namespace Suofang
{
    public class CSVhepler
    {
        public static void DRAWfengyv(DataTable dt)//绘制风羽图
        {
            float interval = 30 * (Form1.form1.scale);
            float Yzhou = interval;
            float Xzhou = interval;
            int s = 12;//风速列
            int d = 13;//风向列
            Graphics g = Form1.form1.panel.CreateGraphics();
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            for (int j = 1; j <= 24; j++)
            {
                for (int i = 0;i<=(Form1.form1.panel.Width-50)/interval; i++)
                {
                    if ((Convert.ToDouble(dt.Rows[i][s]) <= 2))//判断风力大小
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height-Yzhou*j-50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.LightGreen, Xzhou*(i+1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.LightGreen, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 30, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//0-2                       
                        g.ResetTransform();
                    }
                    if (2 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 4)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.Green, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.Green, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//2-4
                        g.ResetTransform();
                    }
                    if (4 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 6)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.GreenYellow, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//4-6
                        g.DrawLine(Pens.GreenYellow, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.GreenYellow, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 30, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.ResetTransform();
                    }
                    if (6 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 8)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.Yellow, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//6-8
                        g.DrawLine(Pens.Yellow, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.Yellow, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.ResetTransform();
                    }
                    if (8 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 10)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.Orange, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//8-10
                        g.DrawLine(Pens.Orange, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.Orange, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.Orange, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5, Xzhou* (i + 1) + 30 + interval / 30, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5);
                        g.ResetTransform();
                    }
                    if (10 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 12)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.OrangeRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//10-12
                        g.DrawLine(Pens.OrangeRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.OrangeRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.OrangeRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5);
                        g.ResetTransform();
                    }
                    if (12 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 14)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.Red, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//12-14
                        g.DrawLine(Pens.Red, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.Red, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.Red, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5);
                        g.DrawLine(Pens.Red, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + (interval * 3) / 10, Xzhou*(i + 1) + 30 + interval / 30, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + (interval * 3) / 10);
                        g.ResetTransform();
                    }
                    if (14 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 16)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.DarkRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 + interval / 3, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);//14-16
                        g.DrawLine(Pens.DarkRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3, Xzhou* (i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3);
                        g.DrawLine(Pens.DarkRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.DarkRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + interval / 5);
                        g.DrawLine(Pens.DarkRed, Xzhou* (i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + (interval * 3) / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou*j - 50 - interval / 3 + (interval * 3) / 10);
                        g.ResetTransform();
                    }
                    if (16 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 18)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3);//16-18
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 5, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 5);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 3) / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 3) / 10);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 2) / 5, Xzhou*(i + 1) + 30 + interval / 30, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 2) / 5);
                        g.ResetTransform();
                    }
                    if (18 < Convert.ToDouble(dt.Rows[i][s]) && Convert.ToDouble(dt.Rows[i][s]) <= 20)
                    {
                        g.TranslateTransform(Xzhou * (i + 1) + 30, Form1.form1.panel.Height - Yzhou * j - 50);
                        g.RotateTransform(float.Parse((dt.Rows[i][d]).ToString()));
                        g.TranslateTransform(-Xzhou * (i + 1) - 30, -Form1.form1.panel.Height + Yzhou * j + 50);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 + interval / 3, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3);//18-20
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 10);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 5, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + interval / 5);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 3) / 10, Xzhou*(i + 1) + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 3) / 10);
                        g.DrawLine(Pens.DarkRed, Xzhou*(i + 1) + 30 - interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 2) / 5, Xzhou*(i + 1)  + 30 + interval / 6, Form1.form1.panel.Height - Yzhou * j - 50 - interval / 3 + (interval * 2) / 5);
                        g.ResetTransform();
                    }                  
                }
                s += 4;
                d += 4;
            }
        }
            public static DataTable ReadCSV(string fileName)//读取CSV文件
        {
            DataTable dt = new DataTable();
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            //记录每次读取的一行记录
            string strLine = null;
            //记录每行记录中的各字段内容
            string[] arrayLine = null;
            //判断,若是第一次,建立表头
            bool isFirst = true;
            //列的个数
            int dtColumns = 0;
            //逐行读取CSV文件
            while ((strLine = sr.ReadLine()) != null)
            {
                strLine = strLine.Trim();//去除头尾空格
                arrayLine = strLine.Split(',');//分隔字符串,返回数组
                if (isFirst) //建立表头
                {
                    dtColumns = arrayLine.Length;//列的个数
                    for (int i = 0; i < dtColumns; i++)
                    {
                        dt.Columns.Add(arrayLine[i]);//每一列名称
                    }
                    isFirst = false;
                }
                else   //表内容,另建一行
                {
                    DataRow dataRow = dt.NewRow();//新建一行
                    for (int j = 0; j < dtColumns; j++)
                    {
                        if (arrayLine.Length > j)
                        {
                            dataRow[j] = arrayLine[j];
                        }
                    }
                    dt.Rows.Add(dataRow);//添加一行
                }
            }
            sr.Close();
            fs.Close();
            return dt;
        }
    }
}

这是CSV文件的读取以及风羽图的绘制。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Suofang
{
    public partial class Form1 : Form
    {
        
        public static Form1 form1;
       
        public float scale = 1.0f; // 缩放比例
        public Form1()
        {
            InitializeComponent();
            form1=this ;
        }
        int s = 0;
        DataTable dt = null;
        private void button1_Click(object sender, EventArgs e)//通过按钮事件绑定CSV文件的读取与风羽图的绘制
        {
           if (s == 0)
            {
                OpenFileDialog openFile = new OpenFileDialog();
                if (openFile.ShowDialog() == DialogResult.OK)
                {
                    string path = openFile.FileName;
                    dt = CSVhepler.ReadCSV(path);
                }
                s++;
            }
            XY.DrawXYLine(panel);
            CSVhepler.DRAWfengyv(dt);
        }
        public void panel_MouseWheel(object sender, MouseEventArgs e)//通过滚轮事件来使用按钮来不断更新画布
        {
            if (e.Delta > 0) // 根据鼠标滚轮的滚动方向调整缩放比例
            { scale *= 1.1f; }
            else
            { scale /= 1.1f; }
            Refresh(); // 重新绘制
            button1_Click(scale, null);

            base.OnPaint(null);
        }
    }
}

这是FORM页的代码以及事件的添加。

using System.Drawing;

namespace Suofang
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.panel = new System.Windows.Forms.Panel();
            this.button1 = new System.Windows.Forms.Button();
            this.panel.SuspendLayout();
            this.SuspendLayout();
            // 
            // panel
            // 
            this.panel.BackColor = System.Drawing.SystemColors.ControlDarkDark;
            this.panel.Controls.Add(this.button1);
            this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel.Location = new System.Drawing.Point(0, 0);
            this.panel.Name = "panel";
            this.panel.Size = new System.Drawing.Size(2000, 1599);
            this.panel.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.button1.Location = new System.Drawing.Point(1877, 12);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(120, 32);
            this.button1.TabIndex = 1;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);//获取或设置控件尺寸
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;//设置自动缩放
            this.AutoScroll = true;//设置滚动
            this.AutoScrollMinSize = new System.Drawing.Size(1900, 1000);//设置滚动的最小大小
            this.BackColor = System.Drawing.Color.White;
            this.ClientSize = new System.Drawing.Size(961, 615);//设置窗体工作区的大小
            this.Controls.Add(this.panel);
            this.Name = "Form1";
            this.Text = "Form1";
            this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel_MouseWheel);//添加绑定滚轮事件
            this.panel.ResumeLayout(false);
            this.ResumeLayout(false);

        }


        #endregion
        private System.Windows.Forms.Button button1;
        public System.Windows.Forms.Panel panel;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值