在介绍实现方法前需要先了解chart控件的几个属性
图中 AxisX.ScaleView.Position = 941 AxisX.ScaleView.Size = 1941-941+1
double[] data = {...};//需要显示的数据 长度为200万。
public List<double[]> DataPanel = new List<double[]>();
for(int m =0;m<40;m++)
{
double [] smallArray = new double [50000];
for(int n = 0;n<50000;n++)
{
smallArray [n] = data [i*50000+n];
}
DataPanel .add(smallArray);
}
private void ChartScrollbarStyle()
{
chartAmend.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
chartAmend.ChartAreas[0].AxisX.ScaleView.Position = 1;
chartAmend.ChartAreas[0].AxisX.ScaleView.Size = 300;
chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Silver;
chartAmend.ChartAreas[0].AxisX.ScrollBar.LineColor = Color.Black;
chartAmend.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;
}
int DataCount = 0;
chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);
chart1.MouseWheel += Chart1_MouseWheel;
private void Chart1_MouseWheel(object sender, MouseEventArgs e)
{
int position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.ScaleView.Position);
int WindowSize = chart1.ChartAreas[0].AxisX.ScaleView.Size;
if (e.Delta < 0)
{
position += 200;//滚轮动一下,移动多少数据
if (position >= chartAmend.ChartAreas[0].AxisX.Maximum - WindowSize)//一段数据显示完毕
{
DataCount++;
if (DataCount >= DataPanel.Count)
{
MessageBox.Show("所有数据已经全部显示完毕","提示");
DataCount = DataPanel.Count-1;
return;
}
chart1.Series[0].Points.DataBindY(Overall.DataPanel[DataCount]);
position = 1;//新的一段数据开始时 滚动条移动到最左侧
}
}
else
{
position -= 200;
if (position < 1)
{
if (DataCount == 0)
{
position = 1;
MessageBox.Show("已经是第一个数据", "提示");
}
else
{
DataCount--;
}
chart1.Series[0].Points.DataBindY(Overall.DataPanel[DataCount]);
position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.Maximum - WindowSize);
}
}
chart1.ChartAreas[0].AxisX.ScaleView.Position = position;
}