timer计时画曲线,又怎么保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变
timer计时画曲线,又如何保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变
timer1_Tick事件代码
draw1.DrawVSCurve(g1, n);就是每次画曲线的下一段,如何保证之前画的能在panel1上一直显示,不随滚动条的移动而消失。
panel1_Paint事件是图像的初始化。
运行截图如下,滚动条移动后再移回来,之前timer1_Tick事件画的图就会消失,怎么破?

------解决方案--------------------
private void timer1_Tick(object sender, EventArgs e)
{
this.panel1.Refresh();
}
------解决方案--------------------
楼主,这个东西我做过类似的,我的目标是接收到的数据显示出来,只是我用的是线程,每点打个点,再和上一个点连线,这样不能在控件上画,应该是在一个Bitmap上画,再把图片设置成控件的背景图片,这样不闪。
每画一条线,就把这个Bitmap保存一下,再画第二条线,否则可能是报错:提示正在使用中什么的。。。
------解决方案--------------------
DoubleBuffer 可以解决闪烁 http://blog.sina.com.cn/s/blog_4e7453df0100d2fy.html
------解决方案--------------------
在内存中画,画完赋值给panel,所有问题都解决了。
timer1_Tick事件代码
private void timer1_Tick(object sender, EventArgs e)
{
Graphics g1 = this.panel1.CreateGraphics();
draw1.DrawVSCurve(g1, n);
draw1.DrawTrainMove(g1, n);
n++;
if (n == 53)
{
timer1.Enabled = false;
MessageBox.Show("模拟停止!");
}
}
draw1.DrawVSCurve(g1, n);就是每次画曲线的下一段,如何保证之前画的能在panel1上一直显示,不随滚动条的移动而消失。
panel1_Paint事件是图像的初始化。
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g= e.Graphics;
draw1.DrawAxis(stationname, stationposition, g);
draw1.DrawLimitedSpeed(stationposition, g);
draw1.DrawMileStone(gradient_start,gradient_length,gradient_value,g);
draw1.DrawTrain(stationposition, g);
}
运行截图如下,滚动条移动后再移回来,之前timer1_Tick事件画的图就会消失,怎么破?
------解决方案--------------------
private void timer1_Tick(object sender, EventArgs e)
{
this.panel1.Refresh();
}
------解决方案--------------------
楼主,这个东西我做过类似的,我的目标是接收到的数据显示出来,只是我用的是线程,每点打个点,再和上一个点连线,这样不能在控件上画,应该是在一个Bitmap上画,再把图片设置成控件的背景图片,这样不闪。
每画一条线,就把这个Bitmap保存一下,再画第二条线,否则可能是报错:提示正在使用中什么的。。。
------解决方案--------------------
DoubleBuffer 可以解决闪烁 http://blog.sina.com.cn/s/blog_4e7453df0100d2fy.html
------解决方案--------------------
在内存中画,画完赋值给panel,所有问题都解决了。