向MS Chart控件添加滚动条 C#

4
请理解我知道有其他关于这个问题的帖子,但我的需求不同。
基本上,在我看到人们说要使用MSChart实现滚动条之前,他们使用
.Size = ...

.View = ...
但是,这会自动出现一个滚动条,而此滚动条包含一个按钮,单击该按钮会导致该条消失,使图表显示所有数据,并且没有办法将滚动条带回图表而不必重新启动应用程序。
所以我问一下,请问有没有办法在我的图表X轴上加入一个水平滚动条? 我需要一个这样的滚动条,以便我可以查看100秒块的图表数据。
即0-100,然后单击滚动条将带我到100-200块。
非常感谢大家!我也在使用C#编码。
3个回答

30

这是一个你所需要的示例:
(要尝试,请创建一个表单,添加一个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缩放


@digEmAll,快照链接已经失效。 - Devendra D. Chavan
@Devendra:这不是一个链接,而是下面有一张图片……也许你的浏览器没有加载图片……? - digEmAll
@digEmAll,快照可见。 - Devendra D. Chavan
嗨@digEmAll,感谢您提供的示例代码。但我有一个问题,如果我们想显示X轴的每个值(1、2、3...),该怎么办?当我在代码中设置chart1.ChartAreas[0].AxisX.Interval = 1d;时,它不能正确显示X轴的值。请问如何实现?非常感谢您的想法。 - Dinesh
我将 If Chart1.ChartAreas(0).AxisX.Maximum -Chart1.ChartAreas(0).AxisX.Minimum > 90 Then Chart1.ChartAreas(0).AxisX.ScaleView.Position = Chart1.ChartAreas(0).AxisX.ScaleView.Position + 100 End If 添加到另一个函数中,该函数添加下一组数据以保持自动向右滚动,随着数据的添加。 - Toby
显示剩余6条评论

0
我会这样做:
    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;
}

因此,当您添加的点数超过您的比例视图时,滚动条会出现。


0
我自己想出了一个方法,希望它能帮到你:
  1. 将图表添加到Panel中。

  2. 使用 panelName.AutoScroll=true; 设置Panel的AutoScroll属性为true。

  3. 在Panel中适当地调整图表大小。

  4. 现在,您可以像使用图表一样使用面板的滚动条!

  5. 如果数据不断添加(例如使用计时器等),请在计时器的Tick事件中添加以下内容:

    chartName.Size = new Size(width++, height++);其中int width = chartName.Width;int height = chartName.Height;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接