Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#windows窗体应用程序图计算值_C#_.net_Winforms_Math_Statistics - Fatal编程技术网

从C#windows窗体应用程序图计算值

从C#windows窗体应用程序图计算值,c#,.net,winforms,math,statistics,C#,.net,Winforms,Math,Statistics,我正在进行热测试,其中有3个设定值(带+/1C)需要确认。 设定点为 37C 60摄氏度 80摄氏度 我已经创建了一个Windows窗体应用程序,可以从“CSV”文件上载数据并在应用程序上打印。 如何计算每个设定点范围的平均值、最小值和最大值? (标记的红色框不是来自应用程序) 是否有方法确定每个设定点的中心点,并在中间两侧2.5分钟之间进行计算 CSV数据如下所示 任何有助于我朝正确方向发展的意见都将不胜感激 很抱歉回复太晚。 我已经用代码和CSV数据链接更新了问题 using Syste

我正在进行热测试,其中有3个设定值(带+/1C)需要确认。 设定点为

  • 37C
  • 60摄氏度
  • 80摄氏度
  • 我已经创建了一个Windows窗体应用程序,可以从“CSV”文件上载数据并在应用程序上打印。

    如何计算每个设定点范围的平均值、最小值和最大值? (标记的红色框不是来自应用程序)

    是否有方法确定每个设定点的中心点,并在中间两侧2.5分钟之间进行计算

    CSV数据如下所示

    任何有助于我朝正确方向发展的意见都将不胜感激

    很抱歉回复太晚。 我已经用代码和CSV数据链接更新了问题

    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.Windows.Forms.DataVisualization.Charting;
    namespace TBE_Temperature_Contral_Test
    {
        public partial class Form1 : Form
        {
    
        public Form1()
        {
            InitializeComponent();
            CHART_CH1.MouseWheel += CHART_CH1_MouseWheel;
            CHART_CH2.MouseWheel += CHART_CH2_MouseWheel;
        }
    
        private void BTN_Load_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog
            {
                InitialDirectory = @"C:\temp",// object of file dialog  sent to open file to default c drive
                Title = "Browse txt File",// text to show on the bar
    
                CheckFileExists = true,// check whether file exit
                CheckPathExists = true,//check file path
    
                DefaultExt = "txt",// the file default extensio
                Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",//filter by default to only txt files
                FilterIndex = 2,
                RestoreDirectory = true,
    
                ReadOnlyChecked = true,
                ShowReadOnly = true
            };//creation and inialization of open file dialog 
            if (openFileDialog1.ShowDialog() == DialogResult.OK)// prompt for a file dialog
            {
                string SourcePath = openFileDialog1.FileName;
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[10] { new DataColumn("No."), new DataColumn("Data"), new DataColumn("Time"), new DataColumn("ID"), new DataColumn("CH1"), new DataColumn("Type_1"), new DataColumn("Unit_1"), new DataColumn("CH2"), new DataColumn("Type_2"), new DataColumn("Unit_2") });
                List<string> list = new List<string>();
                using (StreamReader sr = new StreamReader(SourcePath))
                {
                    while (sr.Peek() >= 0)
                    {
                        list.Add(sr.ReadLine());
                    }
                }
                for (int i = 1; i < list.Count; i++)
                {
                    string[] strlist = list[i].Split('\t');
                    dt.Rows.Add(strlist[0], strlist[1], strlist[2], strlist[3], strlist[4], strlist[5], strlist[6], strlist[7], strlist[8], strlist[9]);
                }
                var filteredCH136 = dt.AsEnumerable()
                 .Where(r => r.Field<string>("CH1").Contains("36"));
                //dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
                string FirstCH136 = (from DataRow dr in dt.Rows
                                    where (string)dr["CH1"] == "36"
                                    select (string)dr["No."]).FirstOrDefault();
                label1.Text = FirstCH136.ToString();
    
                var filteredCH138 = dt.AsEnumerable()
                 .Where(r => r.Field<string>("CH1").Contains("38"));
                //dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
                string FirstCH138 = (from DataRow dr in dt.Rows
                                  where (string)dr["CH1"] == "38"
                                  select (string)dr["No."]).FirstOrDefault();
                label2.Text = FirstCH138.ToString();
                CHART_CH1.Series.Add("CH1_36_38");
    
                CHART_CH1.Series.Add("CH1");
                CHART_CH2.Series.Add("CH2");
                CHART_CH1.Series["CH1_36_38"].ChartType = SeriesChartType.Line;
                CHART_CH1.Series["CH1"].ChartType = SeriesChartType.Line;
                CHART_CH1.Series["CH1"].Color = Color.Orange;
                CHART_CH2.Series["CH2"].ChartType = SeriesChartType.Line;
                CHART_CH2.Series["CH2"].Color = Color.Blue;
                //CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH136), 36);
                //CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH138), 38);
                CHART_CH1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
                CHART_CH1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
                CHART_CH2.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
                CHART_CH2.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
                
                CHART_CH1.DataSource = dt;
                CHART_CH2.DataSource = dt;
    
                CHART_CH1.Series["CH1"].XValueMember ="No.";
                CHART_CH1.Series["CH1"].YValueMembers = "CH1";
                CHART_CH2.Series["CH2"].XValueMember = "No.";
                CHART_CH2.Series["CH2"].YValueMembers = "CH2";
                //databind
                CHART_CH1.DataBind();
                CHART_CH2.DataBind();
            }
        }
    
        private void CHART_CH1_MouseEnter(object sender, EventArgs e)
        {
            if (!CHART_CH1.Focused)
                CHART_CH1.Focus();
        }
    
        private void CHART_CH2_MouseEnter(object sender, EventArgs e)
        {
            if (!CHART_CH2.Focused)
                CHART_CH2.Focus();
        }
    
        private void CHART_CH1_MouseLeave(object sender, EventArgs e)
        {
            if (CHART_CH1.Focused)
                CHART_CH1.Parent.Focus();
        }
    
        private void CHART_CH2_MouseLeave(object sender, EventArgs e)
        {
            if (CHART_CH2.Focused)
                CHART_CH2.Parent.Focus();
        }
    
        private void CHART_CH1_MouseWheel(object sender, MouseEventArgs e)
        {
            var chart = (Chart)sender;
            var xAxis = chart.ChartAreas[0].AxisX;
            var yAxis = chart.ChartAreas[0].AxisY;
    
            try
            {
                if (e.Delta < 0) // Scrolled down.
                {
                    xAxis.ScaleView.ZoomReset();
                    yAxis.ScaleView.ZoomReset();
                }
                else if (e.Delta > 0) // Scrolled up.
                {
                    var xMin = xAxis.ScaleView.ViewMinimum;
                    var xMax = xAxis.ScaleView.ViewMaximum;
                    var yMin = yAxis.ScaleView.ViewMinimum;
                    var yMax = yAxis.ScaleView.ViewMaximum;
    
                    var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
                    var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
                    var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
                    var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
    
                    xAxis.ScaleView.Zoom(posXStart, posXFinish);
                    yAxis.ScaleView.Zoom(posYStart, posYFinish);
                }
            }
            catch { throw; }
        }
    
        private void CHART_CH2_MouseWheel(object sender, MouseEventArgs e)
        {
            var chart = (Chart)sender;
            var xAxis = chart.ChartAreas[0].AxisX;
            var yAxis = chart.ChartAreas[0].AxisY;
    
            try
            {
                if (e.Delta < 0) // Scrolled down.
                {
                    xAxis.ScaleView.ZoomReset();
                    yAxis.ScaleView.ZoomReset();
                }
                else if (e.Delta > 0) // Scrolled up.
                {
                    var xMin = xAxis.ScaleView.ViewMinimum;
                    var xMax = xAxis.ScaleView.ViewMaximum;
                    var yMin = yAxis.ScaleView.ViewMinimum;
                    var yMax = yAxis.ScaleView.ViewMaximum;
    
                    var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
                    var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
                    var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
                    var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
    
                    xAxis.ScaleView.Zoom(posXStart, posXFinish);
                    yAxis.ScaleView.Zoom(posYStart, posYFinish);
                }
            }
            catch { throw; }
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用系统组件模型;
    使用系统数据;
    使用系统图;
    使用System.Linq;
    使用系统文本;
    使用System.Windows.Forms;
    使用System.IO;
    使用System.Windows.Forms.DataVisualization.Charting;
    名称空间温度控制试验
    {
    公共部分类Form1:Form
    {
    公共表格1()
    {
    初始化组件();
    CHART_CH1.mouseweel+=CHART_CH1_mouseweel;
    CHART_CH2.mouseweel+=CHART_CH2_mouseweel;
    }
    私有无效BTN\u加载\u单击(对象发送方,事件参数e)
    {
    OpenFileDialog openFileDialog1=新建OpenFileDialog
    {
    InitialDirectory=@“C:\temp”,//发送文件对话框的对象以将文件打开到默认C驱动器
    Title=“Browse txt File”,//要在栏上显示的文本
    CheckFileExists=true,//检查文件是否退出
    CheckPathExists=true,//检查文件路径
    DefaultExt=“txt”,//文件默认扩展名
    Filter=“Text files(*.txt)|*.txt |所有文件(*.*)|*.*”,//默认情况下仅筛选txt文件
    FilterIndex=2,
    RestoreDirectory=true,
    ReadOnlyChecked=true,
    ShowReadOnly=true
    };//打开文件对话框的创建和初始化
    if(openFileDialog1.ShowDialog()==DialogResult.OK)//提示输入文件对话框
    {
    字符串SourcePath=openFileDialog1.FileName;
    DataTable dt=新的DataTable();
    AddRange(新数据列[10]{新数据列(“编号”)、新数据列(“数据”)、新数据列(“时间”)、新数据列(“ID”)、新数据列(“CH1”)、新数据列(“Type_1”)、新数据列(“Unit_1”)、新数据列(“CH2”)、新数据列(“Type_2”)、新数据列(“Unit_2”)};
    列表=新列表();
    使用(StreamReader sr=新的StreamReader(SourcePath))
    {
    而(sr.Peek()>=0)
    {
    list.Add(sr.ReadLine());
    }
    }
    for(int i=1;ir.Field(“CH1”)。包含(“36”);
    //dt.DefaultView.RowFilter=“否,如“%”“+”36“+”%”;
    字符串FirstCH136=(来自dt.Rows中的DataRow dr
    其中(字符串)dr[“CH1”]=“36”
    选择(字符串)dr[“No.”]).FirstOrDefault();
    label1.Text=FirstCH136.ToString();
    var filteredCH138=dt.AsEnumerable()
    其中(r=>r.Field(“CH1”)包含(“38”);
    //dt.DefaultView.RowFilter=“否,如“%”“+”36“+”%”;
    字符串FirstCH138=(来自dt.Rows中的数据行dr
    其中(字符串)dr[“CH1”]=“38”
    选择(字符串)dr[“No.”]).FirstOrDefault();
    label2.Text=FirstCH138.ToString();
    图表1.系列。添加(“CH1\U 36\U 38”);
    图1.系列添加(“CH1”);
    图2.系列添加(“CH2”);
    CHART_CH1.系列[“CH1_36_38”]。ChartType=系列ChartType.Line;
    CHART_CH1.系列[“CH1”]。ChartType=系列ChartType.Line;
    CHART_CH1.系列[“CH1”]。颜色=颜色。橙色;
    CHART_CH2.系列[“CH2”]。ChartType=系列ChartType.Line;
    CHART_CH2.系列[“CH2”]。颜色=颜色。蓝色;
    //CHART_CH1.Series[“CH1_36_38”].Points.AddXY(float.Parse(FirstCH136),36);
    //CHART_CH1.Series[“CH1_36_38”].Points.AddXY(float.Parse(FirstCH138),38);
    CHART_CH1.ChartAreas[0]。AxisX.ScaleView.Zoomable=true;
    CHART_CH1.ChartAreas[0]。AxisY.ScaleView.Zoomable=true;
    CHART_CH2.ChartAreas[0]。AxisX.ScaleView.Zoomable=true;
    CHART_CH2.ChartAreas[0]。AxisY.ScaleView.Zoomable=true;
    图表1.DataSource=dt;
    图表2.DataSource=dt;
    图表_CH1.系列[“CH1”]。XValueMember=“编号”;
    图表_CH1.系列[“CH1”]。YValueMembers=“CH1”;
    CHART_CH2.系列[“CH2”].XValueMember=“编号”;
    CHART_CH2.Series[“CH2”].YValueMembers=“CH2”;
    //数据绑定
    图表_CH1.DataBind();
    图表_CH2.DataBind();
    }
    }
    私有无效图表\u CH1\u鼠标指针(对象发送方,事件参数e)
    {
    如果(!图表_CH1.Focused)
    图表_CH1.Focus();
    }
    私有无效图表\u CH2\u鼠标指针(对象发送方,事件参数e)
    {
    如果(!图表2.聚焦)
    图表_CH2.Focus();
    }
    私有无效图表\u CH1\u MouseLeave(对象发送方,事件参数e)
    {
    如果(图1.聚焦)
    图表_CH1.Parent.Focus();
    }
    私有无效图表\u CH2\u MouseLeave(对象发送方,事件参数e)
    {
    如果(图2.聚焦)
    CHART_CH2.Parent.Focus();
    }
    私有无效图表\u CH1\u鼠标滚轮(对象发送器,鼠标指针e)
    
    double minvalue = listname.Min();
    double maxvalue = listname.Max();
    double avgvalue = listname.Average();
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    
    namespace TBE_Temperature_Contral_Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                CHART_CH1.MouseWheel += CHART_CH1_MouseWheel;
                CHART_CH2.MouseWheel += CHART_CH2_MouseWheel;
            }
    
            private void BTN_Load_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog
                {
                    InitialDirectory = @"D:\TestData",// object of file dialog  sent to open file to default c drive
                    Title = "Browse txt File",// text to show on the bar
    
                    CheckFileExists = true,// check whether file exit
                    CheckPathExists = true,//check file path
    
                    DefaultExt = "txt",// the file default extensio
                    Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",//filter by default to only txt files
                    FilterIndex = 2,
                    RestoreDirectory = true,
    
                    ReadOnlyChecked = true,
                    ShowReadOnly = true
                };//creation and inialization of open file dialog 
                if (openFileDialog1.ShowDialog() == DialogResult.OK)// prompt for a file dialog
                {
                    string SourcePath = openFileDialog1.FileName;
                    DataTable dt = new DataTable();
                    dt.Columns.AddRange(new DataColumn[10] { new DataColumn("No."), new DataColumn("Data"), new DataColumn("Time"), new DataColumn("ID"), new DataColumn("CH1"), new DataColumn("Type_1"), new DataColumn("Unit_1"), new DataColumn("CH2"), new DataColumn("Type_2"), new DataColumn("Unit_2") });
                    List<string> list = new List<string>();
                    using (StreamReader sr = new StreamReader(SourcePath))
                    {
                        while (sr.Peek() >= 0)
                        {
                            //MessageBox.Show(sr.ReadLine());
                            list.Add(sr.ReadLine());
    
                        }
                    }            
                        for (int i = 1; i < list.Count; i++)
                        {
                        string[] strlist = list[i].Split(',');                  
                        dt.Rows.Add(strlist[0], strlist[1], strlist[2], strlist[3], strlist[4], strlist[5], strlist[6], strlist[7], strlist[8], strlist[9]);
                        }
                    var filteredCH136 = dt.AsEnumerable()
                     .Where(r => r.Field<string>("CH1").Contains("36"));
                    //dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
                    string FirstCH136 = (from DataRow dr in dt.Rows
                                         where (string)dr["CH1"] == "36"
                                         select (string)dr["No."]).FirstOrDefault();
                                   
                    label1.Text = FirstCH136.ToString();
                    var filteredCH138 = dt.AsEnumerable()
                     .Where(r => r.Field<string>("CH1").Contains("38"));
                    //dt.DefaultView.RowFilter = "No. LIKE '%" + "36" + "%'";
                    string FirstCH138 = (from DataRow dr in dt.Rows
                                         where (string)dr["CH1"] == "38"
                                         select (string)dr["No."]).FirstOrDefault();
                    label2.Text = FirstCH138.ToString();
                    CHART_CH1.Series.Add("CH1_36_38");
    
    
                    string FirstCH137 = (from DataRow dr in dt.Rows
                                         where (string)dr["CH1"] == "37"
                                         select (string)dr["No."]).FirstOrDefault();
    
                    string BefNO = (Convert.ToInt32(FirstCH137) - 150).ToString();//Two minutes is 150 seconds
                    string AftNo = (Convert.ToInt32(FirstCH137) + 150).ToString();              
                    int TmpNum = Convert.ToInt32(AftNo) - Convert.ToInt32(BefNO) +1;
                    IEnumerable<double> tmp = (from DataRow dr in dt.Rows 
                                                 where Convert.ToInt32(dr["No."]) >= Convert.ToInt32(BefNO) && Convert.ToInt32(dr["No."]) <= Convert.ToInt32(AftNo) 
                                                 orderby Convert.ToDouble(dr["CH1"]) descending
                                                 select Convert.ToDouble(dr["CH1"]));
    
                    double min =tmp.FirstOrDefault();
                    double max =tmp.LastOrDefault();               
                    IEnumerable<double> TmpSum = (from DataRow dr in dt.Rows
                                                  where Convert.ToInt32(dr["No."]) >= Convert.ToInt32(BefNO) && Convert.ToInt32(dr["No."]) <= Convert.ToInt32(AftNo)
                                                  select Convert.ToDouble(dr["CH1"]));
    
                    double sum = 0;
                    foreach (var v in TmpSum) 
                    {
                        sum += v;
                    }
                    label3.Text = string.Format("{0:F2}", sum / TmpNum);//Average value  
                    label4.Text = min.ToString();//Max value
                    label5.Text = max.ToString();//Min value
    
    
                    CHART_CH1.Series.Add("CH1");
                    CHART_CH2.Series.Add("CH2");
                    CHART_CH1.Series["CH1_36_38"].ChartType = SeriesChartType.Line;
                    CHART_CH1.Series["CH1"].ChartType = SeriesChartType.Line;
                    CHART_CH1.Series["CH1"].Color = Color.Orange;
                    CHART_CH2.Series["CH2"].ChartType = SeriesChartType.Line;
                    CHART_CH2.Series["CH2"].Color = Color.Blue;
                    //CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH136), 36);
                    //CHART_CH1.Series["CH1_36_38"].Points.AddXY(float.Parse(FirstCH138), 38);
                    CHART_CH1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
                    CHART_CH1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
                    CHART_CH2.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
                    CHART_CH2.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
    
                    CHART_CH1.DataSource = dt;
                    CHART_CH2.DataSource = dt;
    
                    CHART_CH1.Series["CH1"].XValueMember = "No.";
                    CHART_CH1.Series["CH1"].YValueMembers = "CH1";
                    CHART_CH2.Series["CH2"].XValueMember = "No.";
                    CHART_CH2.Series["CH2"].YValueMembers = "CH2";
                    //databind
                    CHART_CH1.DataBind();
                    CHART_CH2.DataBind();
                }
            }
    
            private void CHART_CH1_MouseEnter(object sender, EventArgs e)
            {
                if (!CHART_CH1.Focused)
                    CHART_CH1.Focus();
            }
    
            private void CHART_CH1_MouseLeave(object sender, EventArgs e)
            {
                if (CHART_CH1.Focused)
                    CHART_CH1.Parent.Focus();
            }
    
            private void CHART_CH2_MouseEnter(object sender, EventArgs e)
            {
                if (!CHART_CH2.Focused)
                    CHART_CH2.Focus();
            }
    
            private void CHART_CH2_MouseLeave(object sender, EventArgs e)
            {
                if (CHART_CH2.Focused)
                    CHART_CH2.Parent.Focus();
            }
    
            private void CHART_CH1_MouseWheel(object sender, MouseEventArgs e)
            {
                var chart = (Chart)sender;
                var xAxis = chart.ChartAreas[0].AxisX;
                var yAxis = chart.ChartAreas[0].AxisY;
    
                try
                {
                    if (e.Delta < 0) // Scrolled down.
                    {
                        xAxis.ScaleView.ZoomReset();
                        yAxis.ScaleView.ZoomReset();
                    }
                    else if (e.Delta > 0) // Scrolled up.
                    {
                        var xMin = xAxis.ScaleView.ViewMinimum;
                        var xMax = xAxis.ScaleView.ViewMaximum;
                        var yMin = yAxis.ScaleView.ViewMinimum;
                        var yMax = yAxis.ScaleView.ViewMaximum;
    
                        var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
                        var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
                        var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
                        var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
    
                        xAxis.ScaleView.Zoom(posXStart, posXFinish);
                        yAxis.ScaleView.Zoom(posYStart, posYFinish);
                    }
                }
                catch { throw; }
            }
    
            private void CHART_CH2_MouseWheel(object sender, MouseEventArgs e)
            {
                var chart = (Chart)sender;
                var xAxis = chart.ChartAreas[0].AxisX;
                var yAxis = chart.ChartAreas[0].AxisY;
    
                try
                {
                    if (e.Delta < 0) // Scrolled down.
                    {
                        xAxis.ScaleView.ZoomReset();
                        yAxis.ScaleView.ZoomReset();
                    }
                    else if (e.Delta > 0) // Scrolled up.
                    {
                        var xMin = xAxis.ScaleView.ViewMinimum;
                        var xMax = xAxis.ScaleView.ViewMaximum;
                        var yMin = yAxis.ScaleView.ViewMinimum;
                        var yMax = yAxis.ScaleView.ViewMaximum;
    
                        var posXStart = xAxis.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
                        var posXFinish = xAxis.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
                        var posYStart = yAxis.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
                        var posYFinish = yAxis.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;
    
                        xAxis.ScaleView.Zoom(posXStart, posXFinish);
                        yAxis.ScaleView.Zoom(posYStart, posYFinish);
                    }
                }
                catch { throw; }
            }
        }
    }