Adding a scroll bar to MS Chart control C#
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:
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:
Add your chart to a Panel.
Set the AutoScroll property of the panel to true with
panelName.AutoScroll=true;
Size the chart properly in the panel.
You can now use the panel's scrollbar as if it were the chart's!
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++);
whereint width = chartName.Width;
andint height = chartName.Height;
精彩评论