MS Chart c#中的ZOOM Out功能

时间:2013-11-26 09:43:50

标签: c# winforms zoom mschart

我有以下Winforms代码:

void chart1_MouseWheel(object sender, MouseEventArgs e)
        {
            double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum;
            double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
            if (e.Delta < 0)
            {   //chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
                //chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
            }

            if (e.Delta > 0)
            {
                double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin)/2 ;
                double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin)/2;
                chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
            }
        }

放大功能正常工作但e.Delta < 0时,我需要基于上述代码的缩小功能。

2 个答案:

答案 0 :(得分:3)

尝试

chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(1);
chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(1);

如果在缩放时将saveState设置为true,则ZoomReset(1)将返回上一个缩放状态。或者,如果将saveState设置为false,则ZoomReset(1)将一直缩小。这是我的代码,我用鼠标点击我的,但我相信你可以用滚轮工作:

    private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e)
    {
        double startX, endX, startY, endY;

        if (chart1.ChartAreas[0].CursorX.SelectionStart > chart1.ChartAreas[0].CursorX.SelectionEnd)
        {
            startX = chart1.ChartAreas[0].CursorX.SelectionEnd;
            endX = chart1.ChartAreas[0].CursorX.SelectionStart;
        }
        else
        {
            startX = chart1.ChartAreas[0].CursorX.SelectionStart;
            endX = chart1.ChartAreas[0].CursorX.SelectionEnd;
        }
        if (chart1.ChartAreas[0].CursorY.SelectionStart > chart1.ChartAreas[0].CursorY.SelectionEnd)
        {
            endY = chart1.ChartAreas[0].CursorY.SelectionStart;
            startY = chart1.ChartAreas[0].CursorY.SelectionEnd;
        }
        else
        {
            startY = chart1.ChartAreas[0].CursorY.SelectionStart;
            endY = chart1.ChartAreas[0].CursorY.SelectionEnd;
        }

        if (startX == endX && startY == endY)
        {
            return;
        }

        chart1.ChartAreas[0].AxisX.ScaleView.Zoom(startX, (endX - startX), DateTimeIntervalType.Auto, true);
        chart1.ChartAreas[0].AxisY.ScaleView.Zoom(startY, (endY - startY), DateTimeIntervalType.Auto, true);
    }

答案 1 :(得分:0)

作为Baddack points out,您可以使用ZoomReset(1)方法返回缩放历史记录中的一个步骤。但是,如果您使用ZoomReset(0),则可以重置所有缩放操作,而无需关闭历史记录保存。