Как решить размер прокрутки для MSChart controls graph c#

#scroll #zooming #mschart

#прокрутка #масштабирование #mschart

Вопрос:

Я создал график с использованием MSChart и смог реализовать возможность масштабирования.

График может масштабироваться, но проблема возникает, когда я хочу перемещаться после увеличения. Когда я нажимаю вверх и вниз на полосу прокрутки по оси y, приращение прокрутки в порядке. Однако для полосы прокрутки по оси x приращение прокрутки ужасно. Он всегда будет идти в самый конец, даже если в середине есть данные.

Я пытался найти решение в Интернете, но мне не повезло

вот мой код:

         // Chart area (where the axes and series are plotted)
        ChartArea chartArea = new ChartArea();
        chartArea.AxisX.Minimum = DateTime.MinValue.ToOADate();
        chartArea.AxisY.Minimum = 0;
        chartArea.AxisY.Maximum = 100;
        //chartArea.AxisY.IntervalAutoMode = IntervalAutoMode.VariableCount;
        chartArea.AxisX.Title = "Time";
        chartArea.AxisX.LabelStyle.Format = DEFAULT_TIME_FORMAT_STRING;
        chartArea.AxisY.LabelStyle.Format = "#########################";
        chartArea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.NotSet;
        chartArea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.NotSet;
        chartArea.BackColor = Color.Transparent;

        m_chart.ChartAreas.Add(chartArea);

        //add zoom-in features for x and y axis             
        m_chart.ChartAreas[0].CursorY.Interval = 0;
        m_chart.ChartAreas[0].CursorY.IsUserEnabled = true;
        m_chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
        m_chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
        m_chart.ChartAreas[0].AxisY.ScrollBar.IsPositionedInside = true;

        m_chart.ChartAreas[0].CursorX.Interval = 0;
        //m_chart.ChartAreas[0].CursorX.AutoScroll = true;
        //m_chart.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
        m_chart.ChartAreas[0].CursorX.IsUserEnabled = true;
        m_chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
        m_chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
        m_chart.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true; 
  

Я не вижу, что я делаю неправильно

Комментарии:

1. Я хочу прояснить поведение прокрутки для оси x. Когда данные в основном находятся в левой части графика, и когда я нажимаю правую кнопку на полосе прокрутки, они перемещаются в самый конец графика, и вы не можете видеть середину графика (это после масштабирования).

2. ИТАК, я разобрался. Поскольку диаграмма разреженная, она будет перемещаться только в значительные области данных … если вы не измените smallScrollSize. Итак, что я сделал, это m_chart. Области диаграммы[0].AxisX.ScaleView.SmallScrollSize = (m_chart. Области диаграммы[0].AxisX.Maximum — m_chart. Области диаграммы ([0].AxisX.Минимум) / 60;

Ответ №1:

Установите для типа scaleview соответствующий выбор времени.

 m_chart.ChartAreas[0].AxisX.ScaleView.SizeType = "Seconds";
m_chart.ChartAreas[0].AxisX.ScaleView.MinSizeType= "Seconds";
m_chart.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType= "Seconds";
m_chart.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType= "Seconds";
  

Ответ №2:

Просто измените

 m_chart.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;
  

тогда полоса прокрутки выйдет за пределы диаграммы, и вы не столкнетесь с этой проблемой.