【问题标题】:MS-Chart Zooming of x-axis with scroll bar in c#在 C# 中使用滚动条缩放 x 轴的 MS-Chart
【发布时间】:2011-09-22 10:06:49
【问题描述】:

我已使用此链接 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# 中解决这个问题..

【问题讨论】:

  • “不能正常工作”太模糊了……怎么不工作?
  • 我需要对两个轴进行缩放。所以我尝试在“chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e)”事件中单击 y 轴缩放重置时重置两个轴(因为 x 轴缩放重置已被禁用)。现在 Y 轴工作正常,但 X 轴没有重置回初始视图。
  • 我已经试着给你一个答案...如果你还有问题请告诉我

标签: c# mschart


【解决方案1】:

尝试使用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】:

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

    正如您所注意到的,默认情况下,缩放重置按钮(与 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();
    

    相反,如果您喜欢默认的缩放重置行为,您应该为两个轴设置两个按钮,因为不同轴可能有不同数量的视图状态。

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

    【讨论】:

    • 感谢您立即回复。Y 轴应重置为默认视图,但 x 轴应重置为初始视图 ie.chartArea.AxisX.ScaleView.Zoom(0,10);但是,如果我使用您建议的代码,X 轴将重置为没有滚动条的视图。
    【解决方案3】:

    我今天尝试使用以下代码,它似乎工作正常。这里的 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);
      }
    }
    

    感谢您的努力!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2014-12-25
      相关资源
      最近更新 更多