private int[] val;//Chart 值数组
 private int currentValue = 0;//当前值
        private int w, h;//画布大小 宽度和高度
        private Timer tmrRefresh;//定时器
private Pen penChart = new Pen(Color.Lime);//波形颜色
 private Graphics graph;//实例化画图类
//私有方法:绘制图形
private void DrawChart(ref Graphics g, Pen p, ref int[] val)
{ //从 w到 0绘制
            int len = w;//w是实际的长度        
            len--;  //从w-1开始画
 for (int i = 0; i < len; i++)//i的值同时也代表着进来的数据
{ g.DrawLine(p,w-i,h-val[i],w-i+1,h-val[i+1]);
len++;
g.DrawLine(p, len - 1, h - val[len - 2], len, h - val[len - 1]);}}//绘图
        protected override void OnPaint(PaintEventArgs e)
        {
            graph = e.Graphics;          
            DrawChart(ref graph, penChart, ref  val);
          
        }
//定时器更新
private void tmrRefresh_Tick(object sender, EventArgs e)

int len = w;
 for (int i = 0; i < len; i++)
{ if (i < len - 1)
{ val[i] = val[i + 1];}
 else
               {
                   val[len - 1] = currentValue;
                  
               }}
Invalidate();for (int i = 0; i < len; i++)
{ if (i < len - 1)
{ val[i] = val[i + 1];}
 else
               {
                   val[len - 1] = currentValue;
                  
               }主要是这段,看不明白啊,谁给解解惑啊!
}

解决方案 »

  1.   

    这个跟C语言等没什么区别,就是假使len=10把数组val[0----9]中的val[0----8]由val[1-----9]覆盖,val[9]=currentValue
      

  2.   

    多谢了,我一直以为else后面的都没用,现在知道了没有他currentValue就传不进来,也传不给其他元素,也就实现不了平移。可我其实想实现的是股市走势图那种波形图,也就是旧的数据在左边保留,新的数据出现在他的右边,对于数组来说也就是不进行替换,当有新数据传进来时,旧的数据保持不变,新数据添加到数组里,然后绘制数组。请问这该如何实现?做各事件检测数组变化吗?一变化就触发绘图函数进行重绘。