看不懂这6行代码?明白人给解释下吧!

mozhaodi 2009-01-16 03:09:17
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;

}
主要是这段,看不明白啊,谁给解解惑啊!
}




...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mozhaodi 2009-01-16
  • 打赏
  • 举报
回复
多谢了,我一直以为else后面的都没用,现在知道了没有他currentValue就传不进来,也传不给其他元素,也就实现不了平移。可我其实想实现的是股市走势图那种波形图,也就是旧的数据在左边保留,新的数据出现在他的右边,对于数组来说也就是不进行替换,当有新数据传进来时,旧的数据保持不变,新数据添加到数组里,然后绘制数组。请问这该如何实现?做各事件检测数组变化吗?一变化就触发绘图函数进行重绘。
sageking2 2009-01-16
  • 打赏
  • 举报
回复
这个跟C语言等没什么区别,就是假使len=10把数组val[0----9]中的val[0----8]由val[1-----9]覆盖,val[9]=currentValue

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧