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

时间:2011-09-22 10:06:49

标签: c# mschart

我已使用此链接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#..

3 个答案:

答案 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();

相反,如果您喜欢默认的缩放重置行为,则两个轴应该有两个按钮,因为不同的轴可能有不同数量的view-statex。

另一种可能性是,您正在缩放辅助轴,例如AxisX2AxisY2(不确定,但我认为这取决于图表类型),因此您应该重置这些(或者,为了安全起见,只需重置所有轴......)。

答案 1 :(得分:3)

尝试使用ZoomReset(0)

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

答案 2 :(得分: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);
  }
}

感谢您的努力!!