我正在尝试创建一个图表,其中x轴为时间,y轴为arraylist中的值。这些值每10秒更新一次。
我在C#中绘制图表是全新的。
到目前为止我的代码:
此方法仅用于创建图表一次。
private void createChart()
{
chart.Size = new Size(600, 400);
chart.Location = new Point(100, 100);
chart.BackColor = Color.Gray;
chart.Series.Add("Values");
var chartArea = new ChartArea();
chartArea.AxisX.LabelStyle.Format = "hh:mm";
chartArea.AxisX.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisY.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisX.LabelStyle.Font = new Font("Consolas", 8);
chartArea.AxisY.LabelStyle.Font = new Font("Consolas", 8);
chart.ChartAreas.Add(chartArea);
var series = new Series();
series.Name = "Series1";
series.ChartType = SeriesChartType.FastLine;
series.XValueType = ChartValueType.DateTime;
chart.Series.Add(series);
tabpage3.Controls.Add(chart);
}
此方法用于更新图表:
arraylist arraylistMonitor可以包含两种类型的对象; chartObjectsInt和chartObjectsReal。这个arraylist使用timer_tick每隔10秒就会充满更多这些对象。如果可能的话,我想只获得arraylist arraylistMonitor中的最后10-20个对象。
private void updateChart()
{
//Create datetime
string time = DateTime.Now.ToString("HH:mm").ToString();
foreach (ChartObjectsInt chartRecords in arraylistMonitor)
{
if (chartRecords.getDataType() == "Int")
{
// bind the datapoints
chart.Series["Series1"].Points.DataBindXY(time, chartRecords.getIntValue());
}
}
foreach (ChartObjectsReal chartRecordsReal in arraylistMonitor)
{
if (chartRecordsReal.getDataType() == "Real")
{
// bind the datapoints
chart.Series["Series1"].Points.DataBindXY(time, chartRecordsReal.getRealValue());
}
}
// draw!
chart.Invalidate();
}
此刻我也遇到此代码的错误,请参阅image:
我如何正确地完成这项工作?
感谢。