MS-Chart Масштабирование оси X с полосой прокрутки в c # - PullRequest
2 голосов
/ 22 сентября 2011

Я добавил полосу прокрутки к оси x моего элемента управления mschart, используя эту ссылку Добавление полосы прокрутки к элементу управления MS Chart C # , и она работала, как и ожидалось.Но теперь мое требование - мне нужно увеличить обе оси.Но так как я удалил кнопку сброса Zoom для оси 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 ]

3 голосов
/ 07 сентября 2012

Попробуйте использовать 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 голосов
/ 26 сентября 2011

Первое, что приходит в голову, это то, что ваша проблема связана с многократным масштабированием.

Как вы заметили, по умолчанию кнопка сброса масштаба (точно так же, как метод 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 (не уверен, но я думаю, что это зависит от типа диаграммы), поэтому вы должны сбросить их (или, чтобы быть в безопасности) , просто сбросьте все оси ...).

0 голосов
/ 27 сентября 2011

Я попробовал с приведенным ниже кодом сегодня, и, похоже, работает нормально. Здесь цикл 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);
  }
}

Спасибо за ваши усилия !!

...