开发者

Adding a scroll bar to MS Chart control C#

开发者 https://www.devze.com 2023-02-14 08:40 出处:网络
please understand that I know there are other threads concerning this issue, but my needs are different.

please understand that I know there are other threads concerning this issue, but my needs are different.

Basically before I seen people saying to implement a scroll bar with MSChart they use the

.Size = ...

or

.View = ...

But, this make a scroll bar automatically apprear, and this scroll bar contains a button that when clicked causes the bar to vanish, making the chart 开发者_开发问答show all data, and no way of bringing back the scroll bar to the chart without restarting the app.

So I ask, please, Is there a way to incorportate a horizontal scroll bar on the X-axis of my Chart? I am needing on so that I can view my chart data on blocks of 100 second blocks.

i.e. 0 - 100, then click sroll bar will bring me to 100 - 200 block.

Thank you in advance guys!!!!! im coding in C# also


Here's an example of what you need:
(to try it, just create a form, add a mschart and call the following method)

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;
}

Snapshot:

Adding a scroll bar to MS Chart control C#


I would do it like this:

    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;
}

So when you added points more than your scaleview - scrollbar is appear


I worked out my own way for that. Hope it helps you:

  1. Add your chart to a Panel.

  2. Set the AutoScroll property of the panel to true with panelName.AutoScroll=true;

  3. Size the chart properly in the panel.

  4. You can now use the panel's scrollbar as if it were the chart's!

  5. If data gets added continuously(e.g. with a timer or so), add this to the timer's tick event:

    chartName.Size = new Size(width++, height++); where int width = chartName.Width; and int height = chartName.Height;

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号