locked
Zoom every point in chart by mouse over RRS feed

  • Question

  • I have a chart on my c# windows application. I want to zoom every point of chart when mouse on them. like google map

    I mean I don't want zoom all part of chart I want zoom just specefic point like google map

    public partial class Form1 : Form
        {
    
            int[] myArrayX = new int[5];
            double[] myArrayY = new double[5];
            int lastX = -1;
            double lastY = -0.6;
            double xmax;
    
            Graph.Chart chart;
            public Form1()
            {
                InitializeComponent();
                this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
            }
    
            void Form1_MouseWheel(object sender, MouseEventArgs e)
            {
    
                try
                {
                    if (e.Delta > 0)
                    {
                        double xMin = chart.ChartAreas["draw"].AxisX.ScaleView.ViewMinimum;
                        double xMax = chart.ChartAreas["draw"].AxisX.ScaleView.ViewMaximum;
                        double yMin = chart.ChartAreas["draw"].AxisY.ScaleView.ViewMinimum;
                        double yMax = chart.ChartAreas["draw"].AxisY.ScaleView.ViewMaximum;
    
                        double posXStart = chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 2;
                        double posXFinish = chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 2;
                        double posYStart = chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 2;
                        double posYFinish = chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 2;
    
                        chart.ChartAreas["draw"].AxisX.ScaleView.Zoom(posXStart, posXFinish);
                        chart.ChartAreas["draw"].AxisY.ScaleView.Zoom(posYStart, posYFinish);
                    }
                    else if (e.Delta < 0)
                    {
                        ZoomOut();
                    }
    
                }
                catch { }
    
    
            }
    
            private void ZoomOut()
            {
                chart.ChartAreas["draw"].AxisX.ScaleView.ZoomReset();
                chart.ChartAreas["draw"].AxisY.ScaleView.ZoomReset();
            }
    
    
    
            void CreateNewGraph()
            {
                // Create new Graph
                chart = new Graph.Chart();
    
    
                chart.Location = new System.Drawing.Point(13, 185);
    
    
                chart.Size = new System.Drawing.Size(900, 500);
    
    
                chart.ChartAreas.Add("draw");
    
    
    
    
                chart.ChartAreas["draw"].AxisX.Minimum = 0;
                chart.ChartAreas["draw"].AxisX.Maximum = 20;
    
    
                chart.ChartAreas["draw"].AxisX.Interval = 1;
    
    
                chart.ChartAreas["draw"].AxisX.MajorGrid.LineColor = Color.White;
    
    
                chart.ChartAreas["draw"].AxisX.MajorGrid.LineDashStyle = Graph.ChartDashStyle.Dash;
    
    
                chart.ChartAreas["draw"].AxisY.Minimum = -0.4;
                chart.ChartAreas["draw"].AxisY.Maximum = 1;
    
    
                chart.ChartAreas["draw"].AxisY.Interval = 0.2;
    
    
                chart.ChartAreas["draw"].AxisY.MajorGrid.LineColor = Color.White;
    
    
                chart.ChartAreas["draw"].AxisY.MajorGrid.LineDashStyle = Graph.ChartDashStyle.Dash;
    
    
                chart.ChartAreas["draw"].BackColor = Color.Black;
    
    
    
                var series = chart.Series.Add("Test");
    
    
                chart.Series["Test"].ChartType = Graph.SeriesChartType.Line;
    
    
                chart.Series["Test"].Color = Color.Yellow;
    
    
                chart.Series["Test"].BorderWidth = 3;
    
    
                chart.Legends.Add("MyLegend");
                chart.Legends["MyLegend"].BorderColor = Color.YellowGreen;
    
                // Set automatic zooming
                chart.ChartAreas["draw"].AxisX.ScaleView.Zoomable = true;
                chart.ChartAreas["draw"].AxisY.ScaleView.Zoomable = true;
    
                // Set automatic scrolling 
                chart.ChartAreas["draw"].CursorX.AutoScroll = true;
                chart.ChartAreas["draw"].CursorY.AutoScroll = true;
    
                // Allow user selection for Zoom
                chart.ChartAreas["draw"].CursorX.IsUserSelectionEnabled = true;
                chart.ChartAreas["draw"].CursorY.IsUserSelectionEnabled = true;
    
                chart.ChartAreas["draw"].AxisX.ScaleView.Zoomable = true;
                chart.ChartAreas["draw"].AxisY.ScaleView.Zoomable = true;
    
                //chart.MouseWheel += new MouseEventHandler(chart_MouseWheel);
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                CreateNewGraph();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                fillarray();
    
                for (int i = 1; i <= 5; i += 1)
                {
                    chart.Series["Test"].Points.AddXY(myArrayX[i - 1], myArrayY[i - 1]);
                    xmax = myArrayX[i - 1];
                }
    
                if (xmax >= 20)
                {
                    chart.ChartAreas["draw"].AxisX.ScrollBar.Enabled = true;
                    chart.ChartAreas["draw"].AxisX.ScaleView.Zoomable = true;
                    chart.ChartAreas["draw"].AxisX.ScaleView.Zoom(0, xmax);
                }
    
                Controls.Add(this.chart);
    
            }
    
            public void fillarray()
            {
                for (int i = 1; i <= 5; i += 1)
                {
                    lastX = lastX + 1;
                    myArrayX[i - 1] = lastX;
    
                }
    
                for (int i = 1; i < 5; i += 1)
                {
                    lastY = lastY + 0.2;
                    myArrayY[i - 1] = lastY;
    
                }
    
    
            }
        }

    • Moved by Fred Bao Wednesday, April 23, 2014 6:59 AM Not A C# Related Issue
    Tuesday, April 15, 2014 8:28 AM

Answers