how to enable zooming in Microsoft chart control by using Mouse wheel

后端 未结 4 1367
长情又很酷
长情又很酷 2020-12-29 23:11

I am using Microsoft Chart control in my project and I want to enable zooming feature in Chart Control by using Mouse Wheel, how can I achieve this?

but user don\'t

4条回答
  •  佛祖请我去吃肉
    2020-12-29 23:19

    You'll want to use the MouseWheel event.

    First make both axes of your chart zoomable:

    chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
    chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
    

    And assign the event:

    chart1.MouseWheel += chart1_MouseWheel;
    

    Then in the event handler:

    private void chart1_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 { }            
    }
    

    The e.Delta property tells you how many wheel "scrolls" you've done, and can be useful.
    Scrolling out at all will zoom out the whole way.

    There's probably a cleaner way of doing this, but there it is. Hope this helps!

提交回复
热议问题