【问题标题】:ZOOM Out function in MS Chart c#MS Chart c#中的ZOOM Out功能
【发布时间】:2013-11-26 09:43:50
【问题描述】:

我有以下 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 &lt; 0 时,我需要基于上述代码的缩小功能。

【问题讨论】:

    标签: c# winforms zooming mschart


    【解决方案1】:

    试试

    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);
        }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 旧帖子,但是要回到第一级缩放,所花费的时间可能会很长,所以,尽可能快地完成,像这样:while (chart1.ChartAreas[0]. AxisX.ScaleView.IsZoomed) { chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(100);并且不要忘记为您使用的所有轴执行此操作
      • 不需要为此使用循环。根据ZoomReset documentation,使用 ZoomReset(0) 会重置所有缩放操作。
      • 感谢@NarcísCalvet - 我已经根据您的建议更新了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多