Quantcast
Channel: Visual C# forum
Viewing all articles
Browse latest Browse all 31927

Zoom every point in chart by mouse over

$
0
0

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;

            }


        }
    }


Viewing all articles
Browse latest Browse all 31927

Trending Articles