C#中使用滚动条缩放x轴的MS-Chart

3

我使用了这个链接Adding a scroll bar to MS Chart control C#,将滚动条添加到我的mschart控件的x轴上,并且它按照预期工作。但现在我的要求是,我需要对两个轴进行缩放。但由于我删除了x轴的缩放重置按钮,所以我使用以下方法进行强制重置。

private void chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e)
{
    // Handle zoom reset button
    if(e.ButtonType == ScrollBarButtonType.ZoomReset)        
    {
        // Event is handled, no more processing required
        e.IsHandled = true;

        // Reset zoom on X and Y axis
        chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
        chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
    }
  }

但是它目前无法正常工作。请帮我在c#中修复它。

“不正常工作”太模糊了……它是怎么出问题的? - digEmAll
我需要两个轴都能缩放。因此,当单击“chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e)”事件中的y轴缩放重置时,我尝试重置两个轴(因为已禁用x轴缩放重置)。现在Y轴正常工作,但X轴无法恢复到初始视图。 - NewBie
我已经尝试给你一个答案了...如果你还有问题,请告诉我。 - digEmAll
3个回答

4
尝试使用ZoomReset(0)
private void zeroZoom_Click(object sender, EventArgs e)
{  
    chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(0);
    chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(0);
}

3

首先想到的是,您的问题与多次缩放有关。

正如您已经注意到的那样,默认情况下,重置缩放按钮(就像ZoomReset方法一样)并不会完全重置缩放,而是恢复先前的视图状态,即如果您缩放了多次,则仅返回到以前缩放的视图。

要完全重置缩放,您可以使用以下代码:

while (chart1.ChartAreas[0].AxisX.ScaleView.IsZoomed)
    chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();

while (chart1.ChartAreas[0].AxisY.ScaleView.IsZoomed)
    chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();

相反,如果您喜欢默认的缩放重置行为,您应该为两个轴有两个按钮,因为不同的轴可能具有不同数量的视图状态。另一种可能性是,您正在缩放第二轴,例如AxisX2或AxisY2(我不确定,但我认为这取决于图表类型),因此您应该重置它们(或者为了安全起见,只需重置所有轴...)。

感谢您的即时回复。Y轴应该重置为默认视图,但X轴应该重置为初始视图,即chartArea.AxisX.ScaleView.Zoom(0,10); 但是,如果我使用您建议的代码,则X轴将重置为没有滚动条的视图。 - NewBie

0
今天我尝试了以下代码,看起来运行良好。在这里,for循环处理带滚动条的X轴,而下一个if块处理普通的X轴。您能否请过目并告诉我您对此的看法?
private void chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e)
{
  Boolean blnIsXaxisReset = false;
  try
  {
    // Handle zoom reset button
    if(e.ButtonType == ScrollBarButtonType.ZoomReset)        
    {
      // Event is handled, no more processing required
      e.IsHandled = true;

      // Reset zoom on Y axis
      while (chart1.ChartAreas[0].AxisY.ScaleView.IsZoomed)
        chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();

      //Handles Zoom reset on X axis with scroll bar
      foreach (Series series in chart1.Series)
      {
        if (series.YAxisType == AxisType.Secondary)
        {
          chart1.ChartAreas[0].AxisX.ScaleView.Zoom(-10, 10);
          blnIsXaxisReset = true;
          break;
        }
      }

      //Handles Zoom reset on ordinary X axis
      if (blnIsXaxisReset == false)
      {
        while (chart1.ChartAreas[0].AxisX.ScaleView.IsZoomed)
          chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
      }
    }
  }
  catch (Exception ex)
  {
    BuildException buildException = new BuildException();
    buildException.SystemException = ex;
    buildException.CustomMessage = "Error in zooming the Chart";
    ExceptionHandler.HandleException(buildException);
  }
}

感谢您的努力!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接