Добавление полосы прокрутки к элементу управления MS Chart C # - PullRequest
4 голосов
/ 28 февраля 2011

пожалуйста, поймите, что я знаю, что есть другие темы, касающиеся этой проблемы, но мои потребности разные.

В основном, до того, как я видел людей, говорящих о внедрении полосы прокрутки с помощью MSChart, они использовали

.Size = ...

или

.View = ...

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

Поэтому я спрашиваю, пожалуйста, есть ли способ включить горизонтальную полосу прокрутки по оси X моей диаграммы? Мне нужно, чтобы я мог просматривать данные своей диаграммы в блоках по 100 секунд.

т.е. 0 - 100, затем нажмите полосу прокрутки, и вы попадете в блок 100 - 200.

Заранее спасибо, ребята !!!!! я кодирую в C # также

Ответы [ 2 ]

25 голосов
/ 28 февраля 2011

Вот пример того, что вам нужно:
(чтобы попробовать, просто создайте форму, добавьте mschart и вызовите следующий метод)

private void FillChart()
{
    int blockSize = 100;

    // generates random data (i.e. 30 * blockSize random numbers)
    Random rand = new Random();
    var valuesArray = Enumerable.Range(0, blockSize * 30).Select(x => rand.Next(1, 10)).ToArray();

    // clear the chart
    chart1.Series.Clear();

    // fill the chart
    var series = chart1.Series.Add("My Series");
    series.ChartType = SeriesChartType.Line;
    series.XValueType = ChartValueType.Int32;
    for (int i = 0; i < valuesArray.Length; i++)
        series.Points.AddXY(i, valuesArray[i]);
    var chartArea = chart1.ChartAreas[series.ChartArea];

    // set view range to [0,max]
    chartArea.AxisX.Minimum = 0;
    chartArea.AxisX.Maximum = valuesArray.Length;

    // enable autoscroll
    chartArea.CursorX.AutoScroll = true;

    // let's zoom to [0,blockSize] (e.g. [0,100])
    chartArea.AxisX.ScaleView.Zoomable = true;
    chartArea.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
    int position = 0;
    int size = blockSize;
    chartArea.AxisX.ScaleView.Zoom(position, size);

    // disable zoom-reset button (only scrollbar's arrows are available)
    chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

    // set scrollbar small change to blockSize (e.g. 100)
    chartArea.AxisX.ScaleView.SmallScrollSize = blockSize;
}

Фотоснимок:

mschart zooming

0 голосов
/ 19 апреля 2019

Я бы сделал это так:

    if (series1.Points.Count > 2 && chartArea1.AxisX.Maximum - chartArea1.AxisX.Minimum > chartArea1.AxisX.ScaleView.Size)
{
   chartArea1.AxisX.ScrollBar.Enabled = true;
}
else
{
   chartArea1.AxisX.ScrollBar.Enabled = false;
}

Так что, когда вы добавили точек больше, чем ваш масштаб - появляется полоса прокрутки

...