timer计时画曲线,又怎么保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变

timer计时画曲线,又如何保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变
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事件画的图就会消失,怎么破?
timer计时画曲线,又怎么保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变
------解决方案--------------------
private void timer1_Tick(object sender, EventArgs e)
        {
            this.panel1.Refresh();
        } 

------解决方案--------------------
楼主,这个东西我做过类似的,我的目标是接收到的数据显示出来,只是我用的是线程,每点打个点,再和上一个点连线,这样不能在控件上画,应该是在一个Bitmap上画,再把图片设置成控件的背景图片,这样不闪。
每画一条线,就把这个Bitmap保存一下,再画第二条线,否则可能是报错:提示正在使用中什么的。。。
------解决方案--------------------
DoubleBuffer 可以解决闪烁    http://blog.sina.com.cn/s/blog_4e7453df0100d2fy.html
------解决方案--------------------
在内存中画,画完赋值给panel,所有问题都解决了。